我有一个我想要索引的值,看起来像这样:
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。 WhitespanceAnalyzer区分大小写,KeywordAnalyzer将其存储为单个术语:
[Test (Test)]
这意味着如果我只搜索'测试',我将无法返回这两个文件。
关于如何实现这一点的任何想法?它似乎不应该那么困难。
答案 0 :(得分:1)
如果您搜索“测试(测试)”并且想要检索包含该确切表达式的文档,则必须将搜索表达式括在“...”之间,以便Lucene知道您要进行短语搜索。
有关详细信息,请参阅Lucene文档:
http://lucene.apache.org/java/3_0_1/queryparsersyntax.html#Terms