0

我有某些字段的 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" />

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

更新

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

更新 2

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

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

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

4

2 回答 2

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
于 2011-06-23T09:31:55.933 回答
0

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

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

2.)查看 solr 输出。如果您在 tomcat 中运行 solr,请查看 catalina.out ...

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

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

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

于 2011-06-22T14:02:30.293 回答