0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Luceneのサーチ原理(一)

Posted at

このシリーズは、Luceneのサーチに関して紹介する。Luceneは数十のサーチを提供しているが、コアロジックは同じである。今回は、QueryのサブクラスBooleanQueryを紹介しようと思う。

サーチ方式

以下はよく使われるサーチ方式である:
● TermQuery
● BooleanQuery
● WildcardQuery
● PrefixQuery
● FuzzyQuery
● RegexpQuery

TermQuery

図1:
  image.png
図1のTermQueryには、FieldNameはcontent、バリュー(FieldValue)はaを含むファイルを探す。

BooleanQuery

図2:
  image.png
BooleanQueryは多数のサーチを組むサーチである。図2では、多数のTermQueryを組むサーチである。希望のファイルは最低2つのTermQueryには一つが満たされる。同時に2つのTermQueryも満たされたら、スコアが高くなる。

WildcardQuery

Luceneでは、2つのWildcardができる

 public static final char WILDCARD_STRING = '*';   
 public static final char WILDCARD_CHAR = '?';   
 public static final char WILDCARD_ESCAPE = '\\';

*はゼロや多数の文字を意味する。?は一つの文字を意味する。\はそのまま文字をとして使われる。
図3:3.png

?を使うサーチ:
図4:image.png
  
図4のサーチにより、ファイル3とファイル1が結果として出る。
\を使うサーチ:
図5:image.png

図4のサーチにより、ファイル0とファイル1とファイル2とファイル3が結果として出る。
*を使うサーチ:
図6:image.png

图4のサーチにより、ファイル3が結果として出る。

PrefixQuery

図7:image.png

図7のPrefixQueryは、FieldNameはcontent、バリュー(FieldValue)のプレフィックスバリューはgoであるファイルを探す。
図3の例にすると、図7はファイル0とファイル1が結果として出る。

FuzzyQuery

FuzzyQueryは編集距離を使って近似文字列照合を実現する。以下のサーチは図3を例とする。
図8:image.png

図8の各パラメータを紹介する:
● maxEdits:編集距離の最大値
● prefixLength:近似文字列照合によるtermは、最低図8のgodと比べて2つの同じなプレフィックスバリュー、即ちgo。
● maxExpansions:maxEidtsとprefixLengthが満たされた場合、処理できるtermの最大数。
● transpositions:有限オートマトンに関するもの、今回は紹介しないにする。
図8にはファイル0とファイル1が結果として出る。
図9:image.png

図9は図8のコンストラクタファンクションを使い、maxExpansionsとtranspositionsはデフォルトバリューにセットされる。
maxExpansions:デフォルトバリューは50
● transpositions:デフォルトバリューはtrue
図9にはファイル0とファイル1が結果として出る。
図10:image.png

図10は図8のコンストラクタファンクションを使い、prefixLengthとmaxExpansionsとtranspositionsはデフォルトバリューにセットされる。
prefixLength:デフォルトバリューは0
● maxExpansions:デフォルトバリューは50
● transpositions:デフォルトバリューはtrue
図10にはファイル0とファイル1とファイル2とファイル3が結果として出る。
図11:image.png

図11は図8のコンストラクタファンクションを使い、maxEditsとmaxEprefixLengthとmaxExpansionsとtranspositionsはデフォルトバリューにセットされる。
● maxEdits:デフォルトバリューは2
● prefixLength:デフォルトバリューは0
● maxExpansions:デフォルトバリューは50
● transpositions:デフォルトバリューはtrue
図11にはファイル0とファイル1とファイル2とファイル3が結果として出る。

RegexpQuery

regを使うサーチである。
図12:image.png

図12のRegexpQueryは、FieldNameはcontentで、FieldValueはgをスタートとして、dをエンドとして、真ん中はゼロや幾つのoを含むファイルを探す。
図12にはファイル0とファイル1とファイル2が結果として出る。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?