我在列上创建了一个lucene(3.0.1)索引,用文本进行搜索,在此文本上进行测试:
$GLD is a great example of why it does not make sense EVER to try and catch a falling knife.
如果我使用关键字"falling"
进行搜索,它会给我结果,但我对"$GLD"
我正在使用standardAnalyzer:
String longString = "$GLD is a great example of why it does not make sense EVER to try and catch a falling knife."
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_30);
doc.add(new Field("data", longString, Store.YES, Field.Index.ANALYZED));
由于设置了Field.Index.ANALYZED
,因此应该创建令牌并且$GLD
应该存在。分析器将从文本中删除停用词,在此过程中也会删除单词$GLD
。
答案 0 :(得分:0)
Analyzer会更改您的文档字段。为什么不在搜索之前在查询中使用Analyzer。同时,QueryParser可以提供很多帮助。
答案 1 :(得分:0)
您应该检查StandardAnalyzer
,StandardAnalyzer
可能会移除$
并在其程序中使用LowerCaseFilter
(我不确定,我只知道2.3和4.1 )。 LowerCaseFilter
会将单词设为小写。当你搜索大写字母时,你不会得到任何东西。
您可以使用Luke检查索引中的标记化结果。
答案 2 :(得分:0)
使用Luke检查您的查询是否符合您的预期也很有帮助。