【问题标题】:SOLR How to highlight only multi term matches in a multi valued fieldSOLR 如何在多值字段中仅突出显示多项匹配
【发布时间】:2014-10-01 17:46:21
【问题描述】:

我有一个多值分类字段,这些分类可以有多个术语, 例如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>

【问题讨论】:

  • 这可能是由于该字段的分析。介意分享一下字段的字段类型吗?
  • 我在上面的问题中添加了字段及其类型

标签: solr highlighting


【解决方案1】:

我刚刚在我的机器上尝试过,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

【讨论】:

  • 感谢您的建议,但是当我用下划线搜索“456 foo”或“foo_456”时,我什么也找不到。当所有查询词都匹配时,也许有可能只重新输入多值字段的结果。
猜你喜欢
  • 2014-11-23
  • 2021-10-11
  • 1970-01-01
  • 2012-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-28
  • 2012-08-28
相关资源
最近更新 更多