使用空格进行Solr子串搜索

时间:2016-05-13 14:44:57

标签: xml solr substring whitespace wildcard

我希望通过"john doe"搜索找到"hn do""*hn*""john\ d\*"有效,但当查询包含空格时,"*hn\ do*"不起作用。逃避通配符也无济于事。

我的字段定义如下:

 <fieldType name="string" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
     <!--<filter class="solr.EdgeNGramFilterFactory" minGramSize="3" maxGramSize="25" side="back" />-->
     <tokenizer class="solr.KeywordTokenizerFactory"/>
     <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.KeywordTokenizerFactory"/>
     <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
 </fieldType>

1 个答案:

答案 0 :(得分:2)

尝试使用NGramTokenizerFactory。它将在给定范围内生成大小为n-gram的标记。如下

<analyzer>
  <tokenizer class="solr.NGramTokenizerFactory" minGramSize="2" maxGramSize="10"/>
</analyzer>

它将起作用:

In: "john doe"
Out: "jo","joh","john", "john ","john d","john do",
"john doe", "oh", "ohn","ohn ", "ohn d"...

fieldType定义中删除KeywordTokenizerFactory。

您还可以考虑使用solr.EdgeNGramTokenizerFactory

它有另一个属性side

side :(“front”或“back”,默认为“front”)是否从头开始计算n-gram({{1 }})文本或从末尾(front

它将起作用:

back

In: "babaloo" Out: "oo", "loo", "aloo", "baloo" :此KeywordTokenizerFactory将整个文本字段视为单个标记。