我有一个多值的导管区域,这些导管可以有多个术语, 例如cathegory = {" foo"," foo-123"," foo-456"}
当我搜索" foo-45"只有最后一个导弹" foo-456"应该是高亮的,而是字符串" foo"在所有三个导管中都是高亮的。
我可以使用哪种荧光笔,如何使用它来突出显示只匹配所有匹配的查询字词?
这是我对该字段及其类型的定义:
<field name="cathegory_field" type="cathegory_field_type" indexed="true" stored="true" multiValued="true" />
<fieldType class="solr.TextField" name="cathegory_field_type">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" catenateAll="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" splitOnCaseChange="0"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
</fieldType>
答案 0 :(得分:0)
我刚在我的机器上尝试过, WordDelimiterFilterFactory 会创建两个令牌(foo和456)。
在我看来,您可以做的一件事是从查询分析中删除 WordDelimiterFilterFactory 。
另一种解决方案是使用另一个字段进行突出显示;你不使用 WordDelimiterFilterFactory 的地方。以下是一个简单的定义:
<fieldType class="solr.TextField" name="text_cat_hl">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.WordDelimiterFilterFactory" preserveOriginal="1" splitOnCaseChange="0" catenateWords="1" catenateNumbers="1" catenateAll="1"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.LowerCaseFilterFactory"/>
</analyzer>
然后创建一个新字段:
<field name="cat_hl" type="text_cat_hl" indexed="true" stored="true" multiValued="true" />
您需要将category_field的内容复制到它:
<copyField source="cathegory_field" dest="cat_hl"/>
最后,您发出如下查询:
http://127.0.0.1:8983/solr/collection1?select?q=cathegory_field:foo-456&hl.q=cathegory_hl:foo-456