Solr OR查询文本字段

时间:2017-07-07 21:53:16

标签: solr lucene solrcloud

如何使用OR条件对文本字段执行简单查询?像name:ABC OR name:XYZ之类的东西,所以结果集只包含名称正好是" XYZ"或" ABC" 挖了大量的手册,无法弄清楚这一点。 我使用Solr 5.5.0

更新 :升级到Solr 6.6.0,仍然无法弄清楚。以下是演示我的问题的插图:

  1. 这有效:
  2. works

    1. 这也有效:
    2. works too

      1. 这仍然有效:
      2. still works

        1. 但这不是!哦,为什么!?
        2. does not work omg why

3 个答案:

答案 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)

我刚刚提出的一个古怪的解决方法:

enter image description here