我有一个工作搜索,如果有人搜索两个单独的单词(如“红色谷仓”,Lucene很好地返回有“红色谷仓”,“谷仓红色”和“红色拖拉机”旁边的记录大棕色谷仓“。这很好,但结果不会返回任何包含”redbarn“的东西(除非你专门搜索”redbarn“,但是你没有得到”红色谷仓“记录)。
我现在只是使用标准分析仪,但我不确定需要改变什么才能获得我想要的所有记录。
如果重要的话,我在ElasticSearch(引擎盖下是Lucene)之上使用NEST客户端。我研究了各种可用的分析仪和属性,但没有找到合适的组合来实现这一目标。
答案 0 :(得分:3)
执行此操作的最佳方法是编写一个将“redbarn”标记为[“red”,“barn”]的分析器。 Lucene已经为德语做过,你可以看一下DictionaryCompoundWordTokenFilter。
答案 1 :(得分:-1)
标准分析仪适用于大多数情况,但如果您需要详细的文本分析,则需要编写自己的分析仪。
Solr附带的WorldDelimeterFilter可以解决您的问题。 Solr建立在lucene之上,因此如果您使用solr附带的过滤器,则不会出现问题。请参阅下面的示例:
public class CustomAnalyzer extends Analyzer {
public TokenStream tokenStream(String fieldName, Reader reader) {
TokenStream ts = new WhitespaceTokenizer(reader);
ts = new WordDelimiterFilter(ts, 1, 1, 1, 1, 1);
ts = new LowerCaseFilter(ts);
return ts;
}
}