1

私は Lucene にまったく慣れていませんが、最近、問題に遭遇しました。次のような lucene ドキュメントがあります。

--- type ---
gene
--- id ---
xla:379474
--- alt_id ---
emb:BC054227
gb:BC054227
ncbi-geneid:379474
ncbi-gi:148230166
rs:NM_001086315
rs:NP_001079784
unigene:Xl.24622
xla:379474

そのドキュメントを取得するために、以下のクエリを作成しました。では正常に機能しますが、またはでは機能altId = 379474しません。altId をエスケープして試してみる必要があると思いましたが、うまくいきませんでした。それはクエリの予想される動作ですか?、何か不足していますか?altId = ncbi-geneid:379474Xl.24622String altId = QueryParser.escape(altId)

Query query1 = new TermQuery(new Term("type", "gene"));
Query query2 = new TermQuery(new Term("alt_Id", altId));

BooleanQuery query = new BooleanQuery();
query.add(query1, BooleanClause.Occur.MUST);
query.add(query2, BooleanClause.Occur.MUST);

ところで、私は lucene v3.0 を実行しています。

4

2 に答える 2

1

これはあなたを助けるはずです。試してみて、私に知らせてください。 http://www.strongd.net/?p=44

于 2012-06-22T09:26:04.763 に答える
0

問題はエスケープに関連していたのではなく、alt_idインデックスが作成された方法と の使用に関連していたことが判明しましたTermQuery。考えられる解決策は 2 つあります。

  1. TermQueryからの出力に置き換えQueryParser.parseQueryParser作成された で置き換えStandardAnalyzerます。
  2. または、インデックスalt_idを付けてIndex.NOT_ANALYZEDに固執しTermQueryます。

私は最後のものを実装しましたが、うまくいきました。

于 2012-06-26T09:23:29.203 に答える