我使用SOLR 5.2构建应用程序,我需要这种匹配类型:

如果我存储了字段名称:“ bla1 bla2”和名称:“ bla2 something bla3”
当我查询类似名称的东西时:“ bla1 bla2 bla3 bla4 bla4”
我需要它来匹配两个词。

所以我最终要做的就是定义这种类型的字段:

我使用关键字标记器进行索引。

我使用Whitespace Tokenizer和Shingle过滤器进行查询,因此得到类似“ bla tra kla zla cla”的输出“ bla tra”,“ bla tra kla”,“ bla tra kla zla” .......

我已经在分析中尝试过,并且带状拼写效果很好,但是问题是,当我使用真实数据执行查询时,它似乎没有找到匹配项。

 <fieldType name="shingleparse" class="solr.TextField" positionIncrementGap="100">
  <analyzer type="index">
    <tokenizer class="solr.KeywordTokenizerFactory"/>
    </analyzer>
  <analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.ShingleFilterFactory" outputUnigrams="false" outputUnigramsIfNoShingles="true" minShingleSize="2" maxShingleSize="5"/>
  </analyzer>
</fieldType>

<field name="name" type="shingleparse" indexed="true" stored="true" required="true" multiValued="false" />

最佳答案

您能检查一下是否满足您的要求。

<fieldType name="text_general" class="solr.TextField" positionIncrementGap="100">
   <analyzer type="index">
      <tokenizer class="solr.StandardTokenizerFactory"/>
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
         <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
   <analyzer type="query">
     <tokenizer class="solr.StandardTokenizerFactory"/>
         <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true"/>
         <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/>
        <filter class="solr.LowerCaseFilterFactory"/>
   </analyzer>
</fieldType>

10-04 21:53