Solr中的模糊属性搜索(模糊逻辑搜索)

时间:2013-03-04 11:20:54

标签: solr information-retrieval fuzzy-search fuzzy-logic

我希望能够提交如下查询:

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或任何其他搜索框架是否支持此功能?我可以使用查询提升来完成此操作吗?

2 个答案:

答案 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,请参见此处:

Schema documentation

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