SOLR如何仅突出显示多值字段中的多项匹配

时间:2014-09-30 14:18:37

标签: solr highlighting

我有一个多值的导管区域,这些导管可以有多个术语, 例如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>

1 个答案:

答案 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