我使用SOLR 5.2构建一个应用程序,我需要这种类型的匹配:
如果我存储了字段名称:"bla1 bla2"和名称:"bla2 something bla3"当我查询的东西,如名称:"东西bla1 bla2的东西bla3 bla4"我需要它匹配两个项
我最后定义了这个类型的字段:
我使用关键字Tokenizer为索引。
我使用空白标记器和Shingle过滤器查询所以我得到这样的东西"bla tra kla zla"输出"bla tra", "bla tra kla", "bla tra kla zla" .......
我在分析和shingling工作得很好,但问题是,当我执行我的查询与真实的数据,它只是似乎没有找到一个匹配。
<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>