我对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:379474
或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。
答案 0 :(得分:1)
这应该对你有所帮助。 试试让我知道。 http://www.strongd.net/?p=44
答案 1 :(得分:0)
原来问题与转义无关,但与alt_id
被编入索引的方式和TermQuery
的使用无关。有两种可能的解决方案:
TermQuery
替换为QueryParser.parse
的输出,并使用QueryParser
创建StandardAnalyzer
。 alt_id
索引为Index.NOT_ANALYZED
,并坚持使用TermQuery
。我实施了最后一个,效果很好。