elasticsearch - minimum_should_match - match_phrase vs match




Elasticsearch-用撇號搜索單詞 (2)

使用這樣的匹配查詢來搜索帶有撇號的單詞。

{
   "query": {
      "bool": {
         "must": [
           {
             "match": {
                  "_all": "Vincent Vincents Vincent's"
                 }
              }
            ]
         }
     }
}

我希望能夠搜索以下單詞

文森特Vincents文森特的

目前在數據庫和ES中的測試是文森特的

是否有可能檢測到所有格,也忽略了撇號。 我已經看了Word-Delimiter,但似乎無法找到一個像樣的解釋


您需要了解elasticsearch分析儀的工作原理。 分析器執行一個標記(將輸入分成一堆標記,例如空格)和一組標記過濾器(過濾掉不需要的標記,如停用詞或修改標記,如小寫標記過濾器將所有內容轉換為小寫)。

分析是在兩個非常特定的時間進行的 - 在索引期間(當你把東西放入elasticsearch時),以及根據你的查詢,在搜索過程中(你要搜索的字符串)。

也就是說,默認分析器是標準分析器 ,它由標準標記器標準標記過濾器 (清除標準標記器中的標記), 小寫標記過濾器停用詞標記過濾器組成

舉個例子,當你保存字符串“我愛文森特的餡餅! 進入彈性搜索,你使用的是默認的標準分析器,你實際上存儲“我”,“愛”,“文森”,“S”,“派”。 然後,當你試圖用term查詢(這是不分析 )搜索“文森特的”,你不會找到任何東西,因為“文森特的”不是那些令牌! 但是,如果您使用match查詢(已分析 )搜索“Vincent's”,則會發現“我愛文森特的派!” 因為“文森特”和“S”都找到匹配。

底線是:

  1. 在搜索自然語言字符串時使用分析的查詢,例如match
  2. 設置分析儀以滿足您的需求。 你可以設置一個自定義的分析器來執行一個空格標記器或一個字母標記器或一個模式標記器,如果你想變得複雜,以及任何你想要的過濾器。 這取決於你的使用情況,但是如果你正在處理自然語言句子,我不建議這樣做,因為標準詞源化程序是為自然語言搜索而構建的。

請參閱http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/analysis.html進一步閱讀。







elasticsearch