java - Solr 和 Solrj 中的 IN 等效查询

标签 java solr lucene solrj solr4

我使用的是solr5.0.0。我想知道等效的查询 IN 在 solr 或 solrj 中。

如果我需要查询不同品牌的产品,可以使用IN子句。如果我有戴尔、索尼、三星等品牌。我需要使用 Solr 和 Java Solrj 查找这些品牌的产品。

现在我在 Solrj 中使用这段代码

qry.addFilterQuery("brand:dell OR brand:sony OR brand:samsung");

我知道我可以在这里使用 OR,但需要了解 Solr 中的 IN。以及OR的表现。

最佳答案

您可以在 Solr 的 wiki 中阅读有关 its' query syntax 的内容,Solr 默认使用 Lucene's Query parser 的超集。正如您在阅读这两个文档时所看到的那样,类似 IN 的内容并不存在。但是您可以比您提供的示例查询更短。

如果您的默认运算符是 OR,您可以将其从查询中省略。此外,您还可以使用Field Grouping .

qry.addFilterQuery("brand:(dell sony samsung)");

如果 OR 不是您的默认运算符或者您对此不确定,您可以为过滤器查询使用本地参数,以便强制执行 OR。之后您可以再次使用字段分组。

qry.addFilterQuery("{!q.op=OR}brand:(dell sony samsung)");

请记住,您需要将短语用 " 括起来,以使单词保持在一起

qry.addFilterQuery("{!q.op=OR}brand:(dell sony samsung \"packard bell\")");

关于java - Solr 和 Solrj 中的 IN 等效查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29410240/

相关文章:

java - 将 JVM 参数放在一个文件中,以便在运行时获取

solr - Nutch 没有抓取seed.txt 中的所有URL

elasticsearch - Elasticsearch多个分析器不起作用

java - 向 Luke 添加自定义分析器

java - 没有配置 CurrentSessionContext

Java 8 javax.net.ssl.SSLPeerUnverifiedException : peer not authenticated, 但不是 Java 7

java - 如何将 ISO 8601 格式的 DateTime 转换为 Java 中的另一个时区?

java - org.apache.solr.common.SolrException : Bad Request Bad Request request: http://localhost:8080/solr/update? wt=javabin&version=2

使用 Lucene/solr/mahout 进行文本推荐

elasticsearch - 如何在 Kibana elasticSearch 中搜索 Json 消息