如何使用OR条件对文本字段执行简单查询?像name:ABC OR name:XYZ
之类的东西,所以结果集只包含名称正好是" XYZ"或" ABC"
挖了大量的手册,无法弄清楚这一点。
我使用Solr 5.5.0
更新 :升级到Solr 6.6.0,仍然无法弄清楚。以下是演示我的问题的插图:
答案 0 :(得分:1)
执行OR查询的方法有很多种。下面我列出了一些。您可以选择任何一种。
[简单查询]
q=name:(XYZ OR ABC)
[ Lucene Query Parser ]
q={!lucene q.op=OR df=name v="XYZ ABC"}
答案 1 :(得分:1)
您的语法是正确的,但您要求的不是为其制作的文本字段。文本字段被标记化(拆分为多个标记),并且每个标记都是自己搜索的。因此,如果插入的文本是“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)
或其他一些表达方式。
答案 2 :(得分:0)