林建设使用SOLR 5.2的应用程序,我需要这种类型的比赛:SOLR匹配短语(卵石FILTER)
,如果我有存储字段名称:” BLA1 bla2‘和名称:’bla2东西bla3“ 当我查询类似名称的东西:”东西bla1 bla2东西bla3 bla4“ 我需要它匹配两个条款。
所以我落得这样做是定义这种类型的字段:
我使用关键字标记生成器为索引。
我用空白标记生成器和瓦滤波器查询,所以我得到这样的 “喇嘛TRA KLA ZLA CLA” 输出 “BLA TRA”, “喇嘛TRA科军”, “喇嘛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" />
[关键词标记生成器(https://cwiki.apache.org/confluence/display/solr/Tokenizers#Tokenizers-KeywordTokenizer)将整个文本字段作为一个单一令牌。因此,当您将数据编入索引时,可以看到像单个标记'bla2 something bla3'。 – alexf
这正是它应该如何处理,因为例如,如果我查询smth像“** bla2东西bla3 bla4 bla5 **”我会得到带状疱疹“** bla2东西**”,“** bla2东西bla3 * *“,...它应该匹配,但由于某种原因,它不会 – BrainOverflow
因此,在您的示例中,**第一个**('bla1 bla2')匹配,而不是**第二个**('bla2 something bla3')? – alexf