1

これは最近私を困惑させています、そして私はどこにも適切な説明を見つけることができないようです。

Query APIを使用して構築されたクエリを実行すると、完全に機能します。

TermQuery sourceQuery = new TermQuery(new Term("source", "CNN"));

実行results = searcher.search(sourceQuery, 30)してチェックするとresults.totalHits、159の値が表示されます。

ただし、同じプログラムで、QueryParser(デフォルトのフィールドはと呼ばれますtext)を設定しました。

Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_35);
QueryParser parser = new QueryParser(Version.LUCENE_35,
      "text", analyzer);

コマンドラインクエリを入力します

source:CNN

結果が出ませんLuke でこのコマンドを実行すると、結果得られます。誰かが何が起こっているのか考えていますか?

4

1 に答える 1

5

QueryParserオブジェクトに間違ったアナライザーを使用した可能性があります。ご了承ください:

  1. 独自のTermオブジェクトを作成する場合、用語のテキストは大文字になります。
  2. StandardAnalyzerをQueryParserに指定すると、用語のテキストが小文字に変換されます(StandardAnalyzerによって)。
  3. LukeのデフォルトのアナライザーはKeywordAnalyzerで、用語を指定した大文字と小文字(大文字)を保持します。

テキストに索引を付けるとき、用語は大文字になっている(または大文字になっている)と思います。これが、アプローチ1と3が機能する理由を説明していますが、ケースが一致しないため、2は機能しません。一般に、インデックス作成時と検索時に同じアナライザーを使用するか、少なくともケースに注意を払うことをお勧めします。

于 2012-04-05T18:14:12.013 に答える