使用特殊字符的Lucene . net术语查询

本文关键字:net 术语 查询 Lucene 特殊字符 | 更新日期: 2023-09-27 18:16:08

我正在搜索与短语完全匹配的项。经过研究,我认为最好的方法是将字段设置为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)}

但是仍然没有结果。没有特殊字符的搜索是可以的,我需要改变什么?

使用特殊字符的Lucene . net术语查询

不确定c#,但在Java Lucene中,正斜杠(/)不是一个特殊字符。然而,反斜杠(')是。

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

要完整地回答你的问题,如果你能准确地向展示是如何索引文本的将会有所帮助。理想的做法是提供一个简短的、独立的示例来展示这个问题。

我总是想要精确匹配这种类型的搜索,所以创建了一个phraseQuery

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