【问题标题】:Boost solr results with one word match from multiValued使用 multiValued 中的一个单词匹配来提升 solr 结果
【发布时间】:2011-09-20 00:30:09
【问题描述】:

我有某些字段的 solr 架构:

<field name="id" type="integer" indexed="true" stored="true" required="true" multiValued="false" />
<field name="title" type="text" indexed="true" stored="true" multiValued="false" />
<field name="note" type="text" indexed="true" stored="true" multiValued="false" />

现在我用查询搜索它(其中 %s 是我的搜索字符串)

q={!boost b=recip(ms(NOW,date),3.16e-11,1,1)}%s&amp;defType=dismax&amp;qf=title^100 note

我需要为每条记录添加标签之类的东西。

<field name="tags" type="string" indexed="true" stored="false" multiValued="true" />

如果其中一个单词与“tags”字段中的一个值匹配,我如何提升该记录的结果?

更新

刚刚发现,如果我从我的 q 中删除 {!boost b=recip(ms(NOW,date),3.16e-11,1,1)},我的查询将完全按照我的意愿工作。但是这样就不行了

更新 2

刚刚想通了,以前“刚刚想通”是完全错误的。我让它适用于一些搜索字符串,但它对我来说效果不佳。我认为我需要这种行为:

在“title”和“note”字段中,我需要使用“AND”搜索单词,但在“tags”字段中,我需要使用“OR”进行搜索。我怎么能用 dismax 做到这一点?

我现在尝试使用 {!boost} 和查询功能,但没有任何好的结果

【问题讨论】:

    标签: solr relevance solr-boost


    【解决方案1】:

    您的查询看起来像是从网上复制的。

    1.) 确保您的环境中存在一个名为“日期”的字段。

    2.) 查看 solr 输出。如果你在 tomcat 中运行 solr,那么看看 catalina.out...

    ...对于命中和错误的数量。

    如果其中一个单词与“tags”字段中的一个值匹配,我如何提升该记录的结果?

    查看海拔组件:http://wiki.apache.org/solr/QueryElevationComponent

    【讨论】:

    • 字段日期存在且此查询运行良好。请看我对主要问题的编辑,我放在那里“更新 2”QueryElevation 只是可以提升一些特殊搜索字符串的记录。我需要:如果在“标签”中的多值字段包含搜索字符串中的一个单词,则提高此项目的相关性。
    【解决方案2】:

    您可以使用 dismax 的bq(增强查询)来实现这一点。在此处阅读bqhttp://wiki.apache.org/solr/DisMaxQParserPlugin#bq_.28Boost_Query.29

    您必须将查询分解为单独的单词并分别使用每个单词进行搜索标记。因此,如果您的查询是“abc pqr”,您将拥有:

    q={!boost b=recip(ms(NOW,date),3.16e-11,1,1)}%s&defType=dismax&qf=title^100 note&bq=tags:abc OR tags:pqr
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-07
      • 2011-02-28
      • 2014-04-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多