使用multiValued中的一个单词匹配来提升solr结果

时间:2011-06-22 02:10:31

标签: solr relevance solr-boost

我有某些字段的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&defType=dismax&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

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

在“标题”和“注释”字段中我需要带有“AND”的搜索词,但在“tags”字段中我需要用“OR”搜索。我怎么能用dismax做到这一点?

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

2 个答案:

答案 0 :(得分:0)

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

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

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

...有关命中和错误的数量。

  

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

查看高程组件:http://wiki.apache.org/solr/QueryElevationComponent

答案 1 :(得分:0)

您可以使用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