C# Lucene-如何使用特殊字符索引值

C# Lucene-如何使用特殊字符索引值,c#,indexing,lucene,lucene.net,C#,Indexing,Lucene,Lucene.net,我尝试索引一个值,如下所示: Test (Test) 使用StandardAnalyzer,我尝试使用以下方法将其添加到文档中: Field.Store.YES, Field.Index.TOKENIZED 当我使用“Test(Test)”值进行搜索时,我的QueryParser生成以下标记: +Name:test +Name:test 这就像我期望的那样,因为我没有逃避特殊角色 但是,如果在索引我的值时执行QueryParser.Escape('Test(Test)'),它会创建以下术语

我尝试索引一个值,如下所示:

Test (Test)
使用StandardAnalyzer,我尝试使用以下方法将其添加到文档中:

Field.Store.YES, Field.Index.TOKENIZED
当我使用“Test(Test)”值进行搜索时,我的QueryParser生成以下标记:

+Name:test +Name:test
这就像我期望的那样,因为我没有逃避特殊角色

但是,如果在索引我的值时执行QueryParser.Escape('Test(Test)'),它会创建以下术语:

[test] and [test]
然后,当我进行这样的搜索时:

 QueryParser.Escape('Test (Test)')
我得到了两个相同的条件(正如我所期望的)。问题在于,如果我有两个文档的名称被索引:

Test
Test (Test)
两者都匹配。如果我指定搜索值“Test(Test)”,那么我只想获取第二个文档。我很好奇,为什么逃避特殊角色并不能在创造的条件下保留它们。我应该看看有没有其他的分析仪?我查看了WhitespaceAnalyzer和KeywordAnalyzer。WhitePanceAnalyzer区分大小写,KeywordAnalyzer将其存储为以下单个术语:

[Test (Test)]
这意味着,如果我只搜索“Test”,我将无法返回这两个文档

关于如何实现这一点有什么想法吗?这似乎没有那么难。

如果搜索“Test(Test)”,并且要检索包含该精确表达式的文档,则必须将搜索表达式括在“…”之间,以便Lucene知道您要进行短语搜索

有关详细信息,请参阅Lucene文档:

如果搜索“Test(Test)”,并且要检索包含该精确表达式的文档,则必须将搜索表达式括在“…”之间,以便Lucene知道您要执行短语搜索

有关详细信息,请参阅Lucene文档: