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 = ncbi-geneid:379474or Xl.24622。我猜想 altId 必须被转义并且String 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. 有两种可能的解决方案:

  1. 替换TermQuery为 的输出QueryParser.parse,用QueryParser创建的StandardAnalyzer
  2. 或索引alt_idIndex.NOT_ANALYZED并坚持使用TermQuery.

我实施了最后一个,效果很好。

于 2012-06-26T09:23:29.203 回答