【问题标题】:Solr - How to highlight specific terms in specific fieldsSolr - 如何突出显示特定领域的特定术语
【发布时间】:2019-03-30 21:13:01
【问题描述】:

如何在特定字段中突出显示特定术语?

例如,想象以下查询:

foo TITLE("bar")

,我要实现的是foo在所有领域的亮点,bar只在TITLE领域。

到目前为止,以下内容尚未奏效:

q=<TITLE_field_internal_name>:"bar"hl.fl=&&hl.requireFieldMatch=true

注意:在上面的示例中,TITLE 被正确地重新映射到 solr 字段。

【问题讨论】:

    标签: solr lucene highlight


    【解决方案1】:

    最后,经过多次试验和错误,我设法让这个东西工作了这里有一些sn-ps:

    fq=(_query_:"{!edismax+qf%3D'container_title_en'+v%3D'hormones'}"+OR+_query_:"{!edismax+qf%3D$fqf+v%3D'cancer'}")
    
    fqf=authors_tnss+etc+etc+...
    
    hl.q=(_query_:"{!edismax+qf%3D'container_title_en'+v%3D'hormones'}"+OR+_query_:"{!edismax+qf%3D$fqf+v%3D'cancer'}")
    
    hl.fl=id,external_id_s,etc,etc,...
    
    hl.requireFieldMatch=true
    

    ,请注意,如果hl.fl 字段由, 分隔,并且在我的自定义fqf fq 字段中,它们由+ 分隔。

    【讨论】:

      【解决方案2】:

      大多数高亮参数都支持逐字段参数语法:

      f.TITLE.hl.<parameter>
      

      由于您的语法不是有效的 Solr 语法,并且它无法知道 TITLE("bar") 指的是名为 TITLE 的字段,因此您必须自己提取(或提供)该元数据。

      如果您正在查询不同的字段并且只想突出显示在这些字段中命中的字词(即,如果您的查询是 title:bar 只在字段 title 中搜索 bar),您不需要必须使用每个字段设置,但可以将hl.requireFieldMatch 设置为true

      默认情况下,false,无论解析后的查询引用什么字段,所有查询词都将突出显示每个要突出显示的字段 (hl.fl)。如果设置为 true,则只有与突出显示的字段对齐的查询词才会依次突出显示。

      注意:如果查询引用的字段与突出显示的字段不同并且它们具有不同的文本分析,则查询可能不会突出显示它应该具有的查询词,反之亦然。使用的分析是突出显示的字段 (hl.fl),而不是查询字段。

      【讨论】:

      • 在上面的示例中,我能够以编程方式映射TITLE 以了解 solr 字段。
      • 当然,那么您可以使用 requireFieldMatch 或为要执行突出显示的每种字段类型提供自定义参数。
      • 但是“您不必使用每个字段设置,而是可以将 hl.requireFieldMatch 设置为 true。”是不够的,因为我只想在title 字段中突出显示foo,在description 字段中突出显示bar。但同时我不想在包含foo bar 的标题中突出显示bar,我有一个查询TITLE(foo) bar
      • '或为您要执行突出显示的每个字段类型提供自定义参数。'你能分享一个这样的例子吗?
      猜你喜欢
      • 2019-01-05
      • 2011-04-30
      • 1970-01-01
      • 2011-07-18
      • 2010-09-06
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      相关资源
      最近更新 更多