我正在搜索与短语完全匹配的项目。经过研究,我认为最好的方法是将字段设置为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)}
但仍然没有结果。没有特殊字符的搜索很好,我需要更改什么?
答案 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);