1

我希望能够提交这样的查询:

car AND (color:blue AND price:[* TO 10000] AND model:Toyota)

并检索这样的结果(假设这些是最相关的结果):

{name : "An old car", color: "blue", price: "6000", model : "Toyota"}
{name : "An old car", color: "red", price: "5000", model : "Toyota"}
{name : "Another old car", color: "blue", price: "9000", model : "Volvo"}
{name : "Another old car", color: "white", price: "11000", model : "Toyota"}

换句话说,模糊搜索,但不是在字符串级别,而是在“分面级别”。我希望它能够正常工作,以使符合所有要求的文章始终排在首位,但仍能检索到仅与子集匹配的文章。

Solr 或任何其他搜索框架是否支持此功能?例如,我可以使用查询提升来完成此操作吗?

4

2 回答 2

1

我相信可以通过像这样修改查询来完成(为可读性添加了换行符);虽然我不确定 boost 语法:

(car AND (color:blue^0.9 OR color:[* TO *]^0.1) 
     AND (price:[* TO 10000]^0.9 OR price:[* TO *]^0.1) 
     AND (model:Toyota^0.9 OR model:[* TO *]^0.1))

编辑:

这个解决方案似乎完全符合我在实施中的预期。虽然我添加了首选属性的权重。^1000 似乎给了他们足够的权重来赢得非首选。

于 2013-03-04T12:18:40.553 回答
0

如果您使用的是 url 查询,例如在管理前端,查询如下所示:

q=car&fq=color:blue&fq=price:[* TO 10000]&fq=model:Toyota

或者,对于你的例子来说,它是

q=*&fq=name:car&fq=color:blue&fq=price:[* TO 10000]&fq=model:Toyota

现在结果取决于可以在 schema.xml 中配置的配置逻辑运算符,默认运算符是 AND,请参见此处:

架构文档

对于单个字段,filterquery 就像 java 中的 String.contains() 函数。

于 2013-03-05T20:02:58.393 回答