对于Lucene,如果有人搜索;“红谷仓”;,如何返回包含“的结果?”;“红谷仓”;?
我有一个工作搜索,如果有人搜索两个单独的词(如“red barn”),Lucene会很好地返回“red barn”、“barn red”和“big brown barn旁边的红色拖拉机”的记录。这很好,但结果不会返回任何包含“redbarn”的内容(除非您专门搜索“redbarn”),但你不会得到“红色谷仓”记录) 我目前正在使用标准分析器,但不确定需要更改什么才能获得我想要的所有记录对于Lucene,如果有人搜索;“红谷仓”;,如何返回包含“的结果?”;“红谷仓”;?,lucene,
elasticsearch,Lucene,
elasticsearch,我有一个工作搜索,如果有人搜索两个单独的词(如“red barn”),Lucene会很好地返回“red barn”、“barn red”和“big brown barn旁边的红色拖拉机”的记录。这很好,但结果不会返回任何包含“redbarn”的内容(除非您专门搜索“redbarn”),但你不会得到“红色谷仓”记录) 我目前正在使用标准分析器,但不确定需要更改什么才能获得我想要的所有记录 如果有必要的话,我正在使用ElasticSearch(引擎盖下的Lucene)之上的NEST客户端。我已经研究
如果有必要的话,我正在使用ElasticSearch(引擎盖下的Lucene)之上的NEST客户端。我已经研究了各种可用的分析器和属性,但还没有找到正确的组合来实现这一点。最好的方法是编写一个将“redbarn”标记为[“红色”,“barn”]的分析器.Lucene已经为德语提供了这一功能,例如,您可以查看。标准分析器适用于大多数情况,但如果您需要详细的文本分析,则需要编写自己的分析器 Solr附带的过滤器应该可以解决您的问题。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;
}
}
OP特别询问如何使用ElasticSearch实现这一点。以下是如何在ElasticSearch中实现这一点,