1. フルテキスト検索の紹介
1.1。 フルテキスト検索とは何ですか
最後に、以前に学んだのフルテキスト検索を導入するための時間を持っています。百度の解釈によると、フルテキスト検索の概念があります:
フルテキスト検索は、記事をスキャンしてコンピュータプログラムである、すべての単語のインデックスを確立するために、すべての単語は、単語の数や位置を示すことは記事に表示されます。ときに、ユーザは、単語辞書検索テーブルによる検索語の処理と同様ベースのインデックス検索を、問い合わせます。
人気は、フルテキスト検索は、情報のクエリを打破して、クエリ分解に合致する情報を記録した情報を確認することです。最良の例は、Baiduのです。
クエリによって「あなたが来る前に」に分け、「すでに」、「チャンピオン」試合情報やその他の情報をチェックアウト行くために「あなたが私たちのすでにチャンピオンに来る前に」。この検索方法は、フルテキスト検索です。
1.2 フルテキスト検索との違いは何データベースクエリ
多分何人かの人々は、フルテキスト検索とデータベースのクエリは、クエリは、現在ほとんど差であるべきであると言うだろう、ここを参照してください!
違いは次の式パッケージで表現することができる場所です。
データベースは、フルテキスト検索の問題を解決することができるなら、それは持つべきではないのLucene 、彼らが発生する必要があります。ほとんどの試合が大きく制限することができます前と後のデータベースでは、比較の昔ながらの方法を照会します。
「XXXのようなXXXのXXX選ぶ % あなたが私たちのすでにチャンピオンに来る前に、%」
このようなステートメントのクエリ単語と複数のサブクエリ結果の差よりも少しは比較的大きいです。データが比較的大きい場合や、数十のデータの数十億ドルの何百万人ものに会った、データベースクエリの効率が比較的低くなります。
フルテキスト検索は、生まれたばかり、この状況に対処することです。
フルテキスト検索は、効率を維持しながら、データの何百万人を処理し、よりインテリジェントになる結果を探し出すことができます。
2. Luceneをはじめ
公式サイト:http://lucene.apache.org /
Luceneのそれは何ですか?なぜあなたはそれを紹介したいですか?
そのためのLuceneをすることにより、オープンソースのライブラリーのためのフルテキスト検索と検索でのApache およびソフトウェアのサポート基盤を提供します。Luceneには、シンプルでありながら強力なアプリケーション・プログラム・インターフェース(提供APIをで、フルテキストインデックス処理を実行し、検索することができ、)のJava 開発環境のLuceneは、無料のオープンソースツールを成熟です。
もちろん、あなたも使用することができたSolr とElasticsearchを開発するために、私たちは話しましたLuceneを開発するために、他は起動しません。しかし、それはそれを言及する価値がある、SolrのとElasticsearchが基づいているのLuceneは、検索エンジンの製品を開発しました。
2.1。 Luceneのフルテキスト検索の原則
ここについての簡潔のLucene のフルテキスト検索の原則:
Lucene テクノロジーは、データベースのアナロジーを構築することができますが、Luceneの言葉による情報テキストの単語へのアクセスによっては、インデックス付けされたインデックスデータベース(データベース類推)を構成しています。次に、あなたができるLuceneのクエリデータやドキュメントオブジェクトの良いインデックスを構築します。Lucene の文書データベースのレコードに対応し、フェイルドデータベースフィールドに対応します。
注: Luceneのはプレーンテキストに適している(TXT)インデックス、理論的にはDOC、PPT、CLS 、等であることができるが、乏しい試験結果。PDF およびその他のドキュメントを使用する必要がありポイなデータ変換、インデックスの再作成などのツールを。
基準からの図: https://blog.csdn.net/weixin_42633131/article/details/82873731
2.2。 トークナイザ
Wordがある luceneのアルゴリズムが実装インデックス作成、抽出情報に使用されるテキスト情報。がluceneの自体はいくつかのトークナイザが、英語でのみ有効を所有し、中国への影響は良いものではありません。そこでここでは、中国ワードブレーカをお勧めします。IKAnalyzerを
2.2.1。 IKAnalyzer トークナイザ
IK 比較的昔ながらなど、多くの有名な中国ワードブレーカ。グッドセグメンテーション効果、および新しい用語を開発することができ、より良い選択です。
欠点は、に更新されてからということである 2012 のリリース後に、それは更新を停止しました。それを言ってありますが、IKの言葉は、この製品は、その中にファイルを拡張する新しい単語を追加する以上は何も続い更新する必要はありません、完璧ではなかったことを、中国語の単語のボトルネックに達しています。しかし、IKの単語のみがサポートされていLucene4のバージョンのバックサポートしていないバージョンを、Luceneのを高いバージョンをサポートするためのLucene あなたに必要なIK ソースコードワードブレーカを変更することを。
最近では githubのを参照してくださいアップデート関連の詳細、あなたが見ることができます:https://github.com/magese/ik-analyzer-solr
3. Javaが導入さLucene8.1.0を
3.1。 インポート関連するパッケージ
ダウンロードする公式サイトへのLucene のjarファイルのパッケージをします。http://lucene.apache.org/
githubのダウンロードIKAnalyzer のjar パッケージ
インポートされたjar 次のようにパッケージを:
また、導入しながら IKAnalyzer 関連ファイルを:
IKAnalyzer.cfg.xml
ext.dic
stopword.dic
3.1.1。 IKAnalyzer.cfg.xml
IKAnalyzer.cfg.xmlのファイルが置かれるべきである SRC そうでない単語は単語または単語の拡大を止めるために得ることはありません、ディレクトリを。コンフィギュレーション・ファイルこれら二つの文書ext.dicとstopword.dicパス。
。1 <?XMLバージョン= "1.0"エンコード= "UTF-8" ?> 2 。3 <!DOCTYPEシステムのプロパティ"http://java.sun.com/dtd/properties.dtd" > 。4 。5 < プロパティ> 。6 。7 < コメント> IKアナライザ構成拡張</ コメント> 8。 9。 <! - ユーザーが拡張辞書を構成することができ- > 10 11。 < エントリキー= "ext_dict" > ext.dic; </ エントリ> 12である 13れます < !- ユーザーが自分の拡張子ストップワード辞書を設定することができる場所- > 14 15 < エントリキー= "ext_stopwords" > stopword.dic。</ エントリ> 16 17 </ プロパティ>
3.1.2。 ext.dic
ext.dicは辞書を拡大し、単語は語彙単語は単語の内部ではなくなりました拡大していきますです。
3.1.3。 stopword.dic
stopword.dicはシソーラスを停止することで、単語が出てろ過し、デバイスが言葉シソーラス試合を停止します。
3.1.4。 分詞テスト
ここでは、単語の効果をテストするための方法を記述することができます。
1 インポートにjava.io.IOException; 2 インポートjava.io.StringReader; 3 インポートorg.wltea.analyzer.core.IKSegmenter; 4 インポートorg.wltea.analyzer.core.Lexeme; 5 6つの。 パブリック クラスIkanalyzerTest { 7。 8。 プライベート スタティック 空analysisString(){ 9 10文字列のテキスト= "あなたがに来る前に、我々はチャンピオンを持っているということです" ; 11 12にStringReaderのSR = 新しい新しいにStringReader(テキスト); 13 14 IKSegmenter IK = 新新 IKSegmenter(SR、真の); 15 16語彙素LEX = NULL ; 17 18 のtry { 19 20 ながら((LEX = ik.next())!= NULL ){ 21 22 // System.out.print(lex.getLexemeText()+ "|"); 23 24 のSystem.out.println(lex.getLexemeText())。 25 26 } 27 28 } キャッチ(IOExceptionを電子){ 29 30 e.printStackTrace(); 31 32 } 最後に{ 33 34 // 关闭流资源 35 36 もし(!SR = NULL ){ 37 38 sr.close()。 39 40 } 41 42 } 43 44 } 45 46 47 公共 静的 ボイドメイン(文字列[]引数){ 48 49 analysisString()。 50 51 52 } 53 54 }
テスト結果:
ロード拡張辞書: ext.dic
停止ロード拡張辞書: stopword.dic
あなたの中に
来ます
前
米国
既に
優勝