如何在带有OR条件的文本字段上执行简单查询?像name:ABC OR name:XYZ
这样的结果集将只包含那些名称完全是“XYZ”或“ABC”的文档。 挖掘了大量的手册,无法弄清楚。 我使用的Solr 5.5.0Solr或文本字段上的查询
更新:升级到Solr 6.6.0,仍然无法搞清楚。下面是例证来证明我的问题:
- 这工作:
如何在带有OR条件的文本字段上执行简单查询?像name:ABC OR name:XYZ
这样的结果集将只包含那些名称完全是“XYZ”或“ABC”的文档。 挖掘了大量的手册,无法弄清楚。 我使用的Solr 5.5.0Solr或文本字段上的查询
更新:升级到Solr 6.6.0,仍然无法搞清楚。下面是例证来证明我的问题:
有许多方法来执行或查询。下面我列出了其中的一些。你可以选择任何一个。
[简单查询]
q=name:(XYZ OR ABC)
[Lucene的查询分析器]
q={!lucene q.op=OR df=name v="XYZ ABC"}
你的语法是正确的,但你要问的不是场是由什么文本对于。文本字段被标记化(分成多个标记),并且每个标记都被自己搜索。所以如果插入的文本是“ABC DEF GHI”,它将被分成三个独立的标记,即“ABC”,“DEF”和“GHI”。所以,当你搜索字段:ABC时,你确实需要任何具有标记“ABC”的文档。
由于要执行的精确匹配,要查询针对被定义为string
字段的字段,因为这将保持的值逐字(包括套管,所以该匹配将是大小写敏感的)。您可以通过添加copyFile指令,告诉Solr将字段foo
提交的内容并将其复制到字段bar
中,从而允许您在需要时执行完全匹配,以及更通用如果需要搜索。
如果您需要执行精确但不区分大小写的搜索,则可以使用KeywordTokenizer - KeywordTokenizer不做任何事情,将整个字符串保留为单个标记,然后允许您将分析器添加到分析链。通过添加一个LowercaseFilter,您可以告诉Solr在存储它(或查询它)之前将字符串小写。
您可以使用Solr管理页面下的“分析”页面进行实验,看看内容为你的领域正在处理的每一个步骤。
该查询作为string_field:ABC OR string_field:XYZ
后应该做你想要什么(或string_field:(ABC OR XYZ)
或一些其他的方式来表达同样的
OMG就像SolrJ(scala)一样! 'solrQuery.setQuery(s“”“sku:($ {skus.mkString(”“)})”“”)' - 不起作用 'solrQuery。 setQuery(s“”“*:* AND sku:($ {skus.mkString(”“)))”“”)' - work小号! Lucene为什么要这样做?! – Vasily802