即使查询中的一个字段没有匹配项,如何创建返回结果的Solr查询?

时间:2014-04-08 23:28:12

标签: solr lucene

假设我想创建一个推荐系统,根据我所知道的关于你的某些属性以及我对存储在Solr索引中的其他人的属性,建议你应该连接的人。是否可以使用属性列表(以及每个属性的提升)查询索引并使Solr返回得分结果,即使我的某些字段没有返回匹配项?我理解Solr的工作方式是,如果您的某个字段在索引中找到的任何文档中都不包含匹配项,则整个查询的结果为零(即使查询中的其他字段匹配) - 是对的吗?我希望能够查询索引,并根据与某些内容匹配的字段数量给出的分数顺序返回结果列表,即使某些字段没有匹配项,例如:

假设索引中存储了2个人文档,如下(比喻):

Person 1:
     Industry: Manufacturing
     City: Oakland

Person 2:
     Industry: Manufacturing 
     City: San Jose

并且说我执行伪Solr查询基本上说"搜索行业等于制造业且其城市等于奥克兰"的所有人。我想要的是在结果集中收到两个结果,即使其中一个"人员"不住在奥克兰。我只是希望那个人以比Person1更低的分数回来。这可能吗? solr查询可能会处理这个问题?假设我每个人有超过2个属性(所以说我可以使用"和"和#34;或者"在我的solr查询中并不是真的可行..或者是吗?)提前感谢您的有用输入! (PS我使用Solr 3.6)

2 个答案:

答案 0 :(得分:1)

您可以使用bq参数(提升查询)不影响匹配,但仅影响分数。

http://localhost:8983/solr/persons/select?q=industry:manufacturing&bq=City:Oakland^2

在最后使用提升因子来获得匹配分数和提升分数之间的正确平衡。

答案 1 :(得分:1)

您提到使用AND运算符,这可能是您的问题。

Lucene和Solr的默认行为,查询语法正是您所要求的。像:

这样的查询
industry:manufacturing city:oakland

将匹配两者,并且匹配两者的得分偏好。见the lucene query syntax documentation