我希望能够提交如下查询:
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或任何其他搜索框架是否支持此功能?我可以使用查询提升来完成此操作吗?
答案 0 :(得分:1)
我相信可以通过稍微修改查询来完成(为了可读性添加了换行符);虽然我不确定增强语法:
(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似乎给了他们足够的重量来赢得非首选。
答案 1 :(得分:0)
如果您使用的是url查询,例如在admin前端中,查询如下所示:
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()函数。