Solr:搜索单词及其完整的nGrams

时间:2017-05-31 06:29:47

标签: apache solr

我在2个文档中有以下功能:

1: name: "John Oliver W Clane"
2: name: "John Oliver Wayne"

如果搜索查询为q=john,则应显示1和2。如果查询为q=john oli,则表示1和2。但是,如果查询为q=wayne,则只应显示2。如果查询为q=oliver w,则1和2都应显示。

基本上,应该从边缘搜索名称中的所有单词。 如何在solr中配置它?

注意:name已编入索引。

1 个答案:

答案 0 :(得分:2)

您可以为您的字段name尝试以下fieldType。

<analyzer>
  <tokenizer class="solr.KeywordTokenizerFactory"/>
  <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="25"/>
</analyzer>

输入字符串:"John Oliver W Clane"

要过滤的标记符:"John Oliver W Clane"

输出代币:

"John", "John ", "John O", "John Ol", "John Oli", "John Oli", "John Oliv", "John Olive", "John Oliver", "John Oliver ", "John Oliver W", "John Oliver W "
, "John Oliver W C", "John Oliver W Cl", "John Oliver W Cla", "John Oliver W Clan", "John Oliver W Clane".

您可以尝试使用其他过滤器。

<filter class="solr.NGramFilterFactory" minGramSize="4" maxGramSize="25"/>

您可以在此处详细了解分析仪和过滤器。Solr analyzers and filters