2017-07-07 96 views
0

如何在带有OR条件的文本字段上执行简单查询?像name:ABC OR name:XYZ这样的结果集将只包含那些名称完全是“XYZ”或“ABC”的文档。 挖掘了大量的手册,无法弄清楚。 我使用的Solr 5.5.0Solr或文本字段上的查询

更新:升级到Solr 6.6.0,仍然无法搞清楚。下面是例证来证明我的问题:

  1. 这工作:

works

  • 这工作太:
  • works too

    1. 这仍然有效:

    still works

  • 但这并不! Omg为什么!?
  • does not work omg why

    +0

    OMG就像SolrJ(scala)一样! 'solrQuery.setQuery(s“”“sku:($ {skus.mkString(”“)})”“”)' - 不起作用 'solrQuery。 setQuery(s“”“*:* AND sku:($ {skus.mkString(”“)))”“”)' - work小号! Lucene为什么要这样做?! – Vasily802

    回答

    0

    一个古怪的解决办法我刚刚想出了:

    enter image description here

    +0

    不太古怪的查询工作:'+ sku:(13576609 13576610)' – Vasily802

    1

    有许多方法来执行或查询。下面我列出了其中的一些。你可以选择任何一个。

    [简单查询]

    q=name:(XYZ OR ABC) 
    

    [Lucene的查询分析器]

    q={!lucene q.op=OR df=name v="XYZ ABC"} 
    
    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)或一些其他的方式来表达同样的