web-dev-qa-db-ja.com

Luceneインデックス作成:ストアモードとインデックス作成モードの説明

私はまだluceneインデックスオプションを理解していないと思います。

次のオプションは

  • Store.Yes
  • Store.No

そして

  • Index.Tokenized
  • Index.Un_Tokenized
  • Index.No
  • Index.No_Norms

ストアオプションがよくわかりません。なぜあなたは自分のフィールドを保存したくないのですか?
トークン化とは、コンテンツを分割し、ノイズの単語/区切り文字( "and"、 "or"など)を削除することです。
私には規範が何であるかについての手がかりがありません。トークン化された値はどのように保存されますか?
値「mystring」を「fieldName」に格納するとどうなりますか?なぜクエリを実行しないのですか

fieldName:my string

何かを返しますか?

44
Boris Callens

Store.Yes

フィールドの値がインデックスに格納されることを意味します

店番号

フィールドの値が[〜#〜] not [〜#〜]インデックスに格納されることを意味します

Store.Yes/Noは、luceneを使用したインデックス作成または検索には影響しません。フィールド内の値のデータストアとして機能させるかどうかをluceneに通知するだけです。 Store.Yesを使用する場合、検索すると、そのフィールドの値が検索結果のドキュメントに含まれます。

データをデータベースに保存していて、検索にLuceneインデックスのみを使用している場合は、すべてのフィールドでStore.Noを使用する必要があります。ただし、インデックスをストレージとしても使用している場合は、Store.Yesが必要になります。

Index.Tokenized

フィールドがインデックス付けされたときにトークン化されることを意味します(あなたはそれを手に入れました)。これは、複数の単語を含む長いフィールドに役立ちます。

Index.Un_Tokenized

フィールドが分​​析されず、単一の値として保存されることを意味します。これは、keyword/single-Wordおよびいくつかの短いマルチワードフィールドに役立ちます。

Index.No

まさにそれが言うこと。フィールドにはインデックスが付けられないため、検索できません。ただし、canは、Store.YesとともにIndex.Noを使用して、検索可能にしたくない値を格納できます。

Index.No_Norms

Index.Un_Tokenizedと同じですが、正規化データを保存しないことで数バイトが節約される点が異なります。このデータは、ブースティングとフィールド長の正規化に使用されるものです。

さらに読むために、lucene javadocsは貴重です(現在のAPIバージョン4.4.0):

最後の質問ですが、クエリが何も返さない理由について、そのフィールドのインデックスを作成する方法がわからない場合は、fieldName修飾子が「my」文字列にのみ添付されているためだと思います。必要なフレーズ「mystring」を検索するには:

fieldName: "私の文字列"

FieldNameフィールドで「my」と「string」の両方の単語を検索します。

fieldName :(私の文字列)

84
dustyburwell

Javaユーザーがこれに遭遇した場合、2009年3月の回答と同じオプションがLucene 4.6.0 Javaライブラリにまだ存在しますが、非推奨です。これらのオプションを設定する現在の方法は、 FieldType を使用することです。

2
Ian Durkan

Store.YESを使用すると、検索キーワードに一致する単語を(強調表示機能を介して)強調表示することができます。取得するだけでなく、表示することも意味します

0
ridhopratama