【问题标题】:Solr Highlighting not working without hl.q没有 hl.q,Solr 突出显示不起作用
【发布时间】:2016-05-27 22:50:00
【问题描述】:

我正在使用Solr 6.0。我想使用SolrHighlighting功能。

当我进行以下查询时,响应中的 highlighting 部分只有 ID(没有 &hl.q=data:*ad*) -

http://<hostname>:<port>/solr/<core>/select?q=text:ad&fl=data&rows=10&hl=on&hl.fl=data&hl.preserveMulti=true&hl.mergeContiguous=true

输出 -

"highlighting": {
    "id1": {},
    "id2": {}
}

当我进行以下查询时,我会得到所需的输出(使用&amp;hl.q=data:*ad*)-

http://<hostname>:<port>/solr/<core>/select?q=text:ad&fl=data&rows=10&hl=on&hl.q=data:*ad*&hl.fl=data&hl.preserveMulti=true&hl.mergeContiguous=true

输出 -

"highlighting": {
    "id1": {
        "data": ["<em>advertise</em>",
            "<em>add</em>"
        ]
    },
    "id2": {
        "data": ["<em>admin</em>",
            "<em>addon</em>"
        ]
    }
}

为什么我需要通过 hl.q?有办法避免吗?

如果我想在solrconfig.xml 中编写自定义requestHandler(qt),那么我可以将q 值传递给hl.q,并以* 作为前缀,后缀类似于hl.q=*$q*

我有以下 2 个字段 -

<field name="text" type="text_suggest" indexed="true" stored="false" multiValued="true"/>
<field name="data" type="lower" indexed="false" stored="true" multiValued="true"/> 

以下是字段的定义-

<fieldType name="lower" class="solr.TextField" sortMissingLast="true" omitNorms="true">
    <analyzer>
         <tokenizer class="solr.KeywordTokenizerFactory"/>
         <filter class="solr.LowerCaseFilterFactory" />
    </analyzer>
</fieldType>
<fieldType name="text_suggest" class="solr.TextField" positionIncrementGap="100">
    <analyzer type="index">
         <tokenizer class="solr.KeywordTokenizerFactory"/>
         <filter class="solr.LowerCaseFilterFactory"/>
         <filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="30"/>
         <filter class="solr.RemoveDuplicatesTokenFilterFactory"/>
    </analyzer>
    <analyzer type="query">
         <tokenizer class="solr.KeywordTokenizerFactory"/>
         <filter class="solr.LowerCaseFilterFactory"/>
    </analyzer>
</fieldType>

以下是在 2 个字段中复制数据的方式 -

<copyField source="somefield" dest="text" maxChars="30"/>
<copyField source="somefield" dest="data"/>

编辑 1

当我将&amp;hl.alternateField=data 添加到第一个查询时,多值字段中的所有值都会显示在highlighting 部分中,就像普通搜索一样。如下 -

"highlighting": {
    "id1": {
        "data": ["advertise",
            "not relevant",
            "add"
        ]
    },
    "id2": {
        "data": ["admin",
            "addon",
            "irrelevant"
        ]
    }
}

【问题讨论】:

    标签: solr highlighting solr6


    【解决方案1】:

    将 EdgeNGram 过滤器添加到 lower 类型,它将匹配第一个示例。它不会匹配数据中的“广告”,因为它没有任何 NGram。

    【讨论】:

      猜你喜欢
      • 2012-10-04
      • 2012-05-18
      • 1970-01-01
      • 1970-01-01
      • 2011-06-07
      • 1970-01-01
      • 2016-01-16
      • 2018-04-05
      • 2012-10-30
      相关资源
      最近更新 更多