带空格的 Solr 子字符串搜索

Solr substring search with whitespace

我想通过 "hn do" 搜索找到 "john doe""*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>

尝试使用 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" or "back", default is "front") 是否从头开始计算n-grams (front) 或从末尾 (back)

它将作为 :

In: "babaloo"
Out: "oo", "loo", "aloo", "baloo"

KeywordTokenizerFactory :这 tokenizer 将整个文本字段视为单个标记。