如何正确地逃避lucene查询?

时间:2012-06-22 09:23:31

标签: java lucene escaping

我对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:379474Xl.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。

2 个答案:

答案 0 :(得分:1)

这应该对你有所帮助。 试试让我知道。 http://www.strongd.net/?p=44

答案 1 :(得分:0)

原来问题与转义无关,但与alt_id被编入索引的方式和TermQuery的使用无关。有两种可能的解决方案:

  1. TermQuery替换为QueryParser.parse的输出,并使用QueryParser创建StandardAnalyzer
  2. 或将alt_id索引为Index.NOT_ANALYZED,并坚持使用TermQuery
  3. 我实施了最后一个,效果很好。