我正在使用SOLR 5.2构建应用程序,我需要这种类型的匹配:
如果我存储了字段名称:" bla1 bla2 "和名称:" bla2 something bla3 " 当我查询名称之类的东西时:" bla1 bla2 bla2 bla4" 我需要它来匹配两个术语。
所以我最终做的是定义这种类型的字段:
我使用关键字标记符进行索引。
我使用Whitespace Tokenizer和Shingle过滤器进行查询,所以我得到类似这样的内容" bla tra kla zla cla"输出" 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" />
答案 0 :(得分:0)
您能否检查一下这是否符合您的要求。
<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>