2011-06-22 47 views
0

一个字的比赛我有某些领域Solr模式:升压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”字段的值之一匹配?

更新

就想通了,如果我删除{!提振B = RECIP(MS(NOW,日期),3.16e-11,1,1)}从我的Q,我的查询工作究竟如何我想要。但随着这一点,不要

更新2

就想通了,以前“只是想出了”是completele错了。我为某些搜索字符串工作,但它不适合我。我认为我需要这样的行为:

在“title”和“note”字段我需要带有“AND”的搜索词,但是在“tags”字段中,我需要使用“OR”进行搜索。我如何用dismax做到这一点?

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

回答

0

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

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

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

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

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

看那高度分量为:http://wiki.apache.org/solr/QueryElevationComponent

+0

field date exists and this query working well。请参阅我的主要问题的编辑,我把那里“更新2” QueryElevation只是可以提升特殊搜索字符串的一些记录。 我需要的:如果在“标签”多值字段包含搜索字符串中的一个字,然后提高这个项目的相关性。 – striker

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