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

C# 具有特殊字符的Lucene.Net术语查询,c#,.net,lucene,C#,.net,Lucene,我正在搜索与短语完全匹配的项目。经过研究,我认为最好的方法是将字段设置为未分析,并执行术语查询 这很好,但是当一个术语有一个特殊的字符,比如“/”时,就没有结果了。我可以使用Luke看到字段包含字符。我这样构造我的查询 BooleanQuery filterQuery = new BooleanQuery(); filterQuery.Add(new TermQuery(new Lucene.Net.Index.Term(customFieldFilter.Name, val)), Occur.

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

这很好,但是当一个术语有一个特殊的字符,比如“/”时,就没有结果了。我可以使用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)}
但仍然没有结果。没有特殊字符的搜索是可以的,我需要更改什么?

不确定C#,但在Java Lucene中,正斜杠(
/
)是可以更改的。但是,反斜杠(
\
)是

您对代码所做的是使用转义斜杠转义不需要转义的符号。这应该不会导致与初始代码的差异,因此您将得到结果


为了完整地回答您的问题,如果您能够准确地显示如何为文本编制索引,这将有所帮助。一个简短的、自包含的例子来说明这个问题将是理想的。

我总是想要一个与这种类型的搜索完全匹配的,所以做了一个短语查询

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

谢谢你的回答,我已经设法让这个工作,现在将张贴答案。抱歉没有包括索引代码-我对Lucene来说是个新手,没有意识到这是一个重要的方面。