具有特殊字符的Lucene .Net术语查询

时间:2014-08-01 09:27:55

标签: c# .net lucene

我正在搜索与短语完全匹配的项目。经过研究,我认为最好的方法是将字段设置为NOT_ANALYSED并执行TermQuery

这样可以正常工作,但是当一个术语具有特殊字符时,例如“/”则没有结果。我可以看到使用Luke该字段包含该字符。我像这样构建我的查询。

BooleanQuery filterQuery = new BooleanQuery();
filterQuery.Add(new TermQuery(new Lucene.Net.Index.Term(customFieldFilter.Name, val)), Occur.MUST);
booleanQuery.Add(filterQuery, Occur.MUST);

最终查询如下所示:

{+Type:Person +(+Expertise:Customer Care/Account Management)}

API提到“/”是一个特殊字符,所以我试图逃避它

val = val.Replace("/", "\\/"); 
{+Type:Person +(+Expertise:Customer Care\/Account Management)}

但仍然没有结果。没有特殊字符的搜索很好,我需要更改什么?

2 个答案:

答案 0 :(得分:0)

不确定C#,但在Java Lucene中,正斜杠(/)为not a special character。然而,反斜杠(\)是。

您对代码所做的是使用转义斜杠来转义不需要转义的符号。这应该与初始代码没有任何区别,因此你得到了结果。

要完全回答您的问题,如果您能够显示您是如何索引文本的,那将会有所帮助。一个显示这个问题的简短,独立的例子将是理想的。

答案 1 :(得分:0)

我总是希望与此类型的搜索完全匹配,因此创建了一个phraseQuery

PhraseQuery query = new PhraseQuery();
query.Add(new Term(customFieldFilter.Name, val));
booleanQuery.Add(query, Occur.MUST);
相关问题