3

いくつかのデータを使用してインデックスを作成しました。現在、WildcardQueryを使用してこのデータを検索しています。インデックスに登録されたドキュメントProduct Codeには、検索対象のフィールド名があります。

以下は、クエリの作成と検索に使用しているコードです。

Term productCodeTerm = new Term("Product Code", "*"+searchText+"*");

query = new WildcardQuery(productCodeTerm);

searcher.search(query, 100);

searchText変数には、インデックスの検索に使用される検索文字列が含まれています。が'jf'の場合searchString、次の結果が得られます。

JF32358
JF5215
JF2592

さて、を使用して25, or f2 or f3、またはのみを使用する以外の何かを使用して検索しようとするとj,f,jf、クエリはヒットしません。

なぜそれが起こっているのか理解できません。検索がこのように動作している理由を誰かが理解するのを手伝ってもらえますか?

4

2 に答える 2

2

インデックス作成時にどのアナライザーを使用しましたか?例を考えると、アナライザーが次のことを確認する必要があります。

  • 小文字化を行います、
  • 数字を削除しません、
  • 文字と数字の境界で分割されません。
于 2012-08-03T08:52:56.397 に答える
0

luceneのFAQページには次のように書かれています。

先頭のワイルドカード(* ookなど)は、デフォルトではQueryParserではサポートされていません。Lucene 2.1以降、QueryParser.setAllowLeadingWildcard(true)を呼び出すことで有効にできます。これはコストのかかる操作になる可能性があることに注意してください。パターンに一致するトークンを探すために、インデックス内のトークンのリスト全体をスキャンする必要があります。

詳細については、こちらを確認してください。

于 2012-08-03T05:59:28.447 に答える