我使用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>