Solr Query,drupal apache solr模块的语法问题

时间:2015-04-24 05:49:47

标签: apache solr drupal-7

我正在使用apache solr和drupal 7 apachesolr的模块。 我们的一些查询非常自定义。

我一直在查看solr文档和stackoverflow的解释。 我提出了查询:

/select?q=&start=0&rows=20&fq=bundle:(message)&fq=sm_hashtags:(hashtags)&fq=(is_uid:(1 OR 2 OR 37 OR 38 OR 50 OR 166 OR 174 OR 198 OR 431 OR 499 OR 640 OR 642) AND is_privacy:(0)) AND -is_uid:(177 OR 189) AND is_status:(1)&fq=entity_id:{* TO 2666}&fl=tus_message_object,sm_hashtags,content,ts_search,is_privacy,is_status,is_uid&sort=entity_id+desc&wt=json&wt=json

但这是返回NULL,我尝试了一些不同的东西,如:

/select?q=&start=0&rows=20&fq=bundle:(message)&fq=sm_hashtags:(hashtags)&fq=((is_uid:(1+OR+2+OR+37+OR+38+OR+50+OR+166+OR+174+OR+198+OR+431+OR+499+OR+640+OR+642)+is_privacy:(0))-is_uid:(177+OR+189)+is_status:(1))&fq=entity_id:{*+TO+2666}&fl=tus_message_object,sm_hashtags,content,ts_search,is_privacy,is_status,is_uid&sort=entity_id+desc&wt=json&wt=json

但我不确定这是否正确。

我需要一个过滤器,允许具有id(is_uid)的用户和所有具有隐私权限的用户为0但不是阻止id列表中的用户-is_uid且状态为1的用户。

2 个答案:

答案 0 :(得分:0)

你使用了很多条款,因此很难确定原因是什么。我可以给你以下提示:

a)调试模式
复制整个查询字符串,转到Solr管理控制台并使用其他debug = true或debugQuery = true执行该查询。在即将到来的回复中,Solr将添加一个附加部分,说明它如何“看到”您输入的查询

b)逐一调查每个fq
如果有问题,可以肯定在过滤查询中,所以我建议你逐一逐步尝试。但在此之前,请参阅c)点。

c)fq设计
筛选查询非常适合其缓存功能。在这里,虽然有一些我认为不会被重用的fq(is_uid过滤器)我建议你拆分这些查询,以便获得更好的可重用(即缓存)结果;类似的东西:

fq=bundle:message // You already have this
fq=sm_hashtags:hashtags // You already have this
fq=is_privacy:0 // this will cache (for further reuse) all documents with no privacy
fq=is_status:1 // this will cache (for further reuse) all documents with status 1
fq=is_uid(1 OR 921 OR 9...) // Most probably these query results won't benefit so much of caching. If so, I think this query could be also part of the main query
fq=-is_uid(8 OR 99) // Most probably these query results won't benefit so much of caching. If so, I think this query could be also part of the main query

答案 1 :(得分:0)

您在任何字段q=上都没有查询。尝试q=*:*或任何字段上的任何内容。调试solr的最佳方法是在solr查询构建器中手动构建查询,通常是http://localhost:8983/solr并查看它返回的内容。