2017-07-07 98 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)或一些其他的方式來表達同樣的