我是solr的新手。我是否混淆是使用q
还是fq
。假设我有一些字段
索引文件为state
,title
,processed_title
,description
我想要
的结果 boiler keyword (all matches) in state delhi and also boiler keyword (exclude repair) in kerala
我想的一个解决方案
q=((boiler AND state:delhi) OR (boiler AND -repair AND state:kerala))
其他解决方案可能是
q=boiler&fq=(state:gujarat OR (state:kerala AND -processed_title:repair -title:repair -description:repair))
我必须在python中编写json interafe来进行查询。 JSON可能看起来像(在字典下面只是一个例子)
{
q: 'boiler',
filter: {
state: kerala,
price: [10 TO 100]
}
}
我的问题是:
q
或更好地编写所有内容以同时使用q
和fq
,或者有任何方法吗?我正在使用solr 4.10。
由于
答案 0 :(得分:0)
使用q和fq要好得多。你把fq用于过滤掉文档(结果是二进制,文档是在里面还是在里面),你输入q想要搜索的内容(这是更渐进的,一个文档可以匹配所有关键字和另一个一个只匹配一个。如果你可以把所有东西放在fq中,那么,q = *:*就完全可以了。)
差异是:
关于json api问题,我真的不明白你的意思。
答案 1 :(得分:0)
一个好的经验法则是,如果你的字段有一组固定的值,则使用fq。在你的情况下,状态应该在fq中。 q用于计算solr得分。分数越高意味着匹配越好。您可以阅读更多here。
fq不用于计算分数。 SOLR中的文件要么具有喀拉拉邦,要么没有。
假设您的系统中有三个文档。
doc1: {'title':'idli idli idli','state':['kerala','karnataka']}
doc2: {'title':'idli','state':['kerala']}
doc3: {'title':'paneer','state':['punjab']}
要查询idli和州喀拉拉邦,您可以使用
q=idli&fq=kerala
这有点过于简单,但Solr会为doc1返回更高的分数,因为它有更多idli这个单词的实例而不是doc2。 fq不会(也不应该)影响分数。一个州有idli或它没有