我有某些字段的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}和查询功能,但没有任何好结果
答案 0 :(得分:0)
您的查询看起来就像是从网上复制的。
1。)确保您的环境中存在一个名为“date”的字段。
2.)查看solr输出。如果你在tomcat中运行solr,那么看看catalina.out ......
...有关命中和错误的数量。
如何提高该记录的结果,其中一个单词与“tags”字段中的一个值相匹配?
答案 1 :(得分:0)
您可以使用dismax的bq
(提升查询)来实现此目的。在此处阅读bq
:http://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