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

Solr Query, Syntax trouble with drupal apache solr module

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

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

/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 的用户.

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

a) 调试模式
复制整个查询字符串,转到 Solr 管理控制台并使用附加 debug=true 或 debugQuery=true 执行该查询。在即将到来的响应中,Solr 将附加一个附加部分,解释它如何 "sees" 您输入的查询

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

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