2016-09-29 110 views
0

假設在搜索詞中查詢「house garden garage」。索引中的文件只包含「房子,花園」,「花園,車庫」和「房屋車庫」,但沒有文件包含所有三個單詞。搜索多個單詞,不匹配標記單詞

當前查詢是使用split_keyword分析器和運算符「AND」構建的。所以查詢不會返回任何結果。

但是,如果一個搜索詞被省略,則會有結果。

是否有可能只返回匹配3個術語子集的文檔,並在結果中得到省略的術語?

目前我唯一看到的方法是使用「OR」作爲運算符執行查詢並解釋啓用併爲每個字段的單個詞提取分數並找到不匹配的詞。但這似乎是非常無意的。

回答

0

我認爲Named Queries會在這裏很有幫助。你可以用_name PARAM寫應當子句查詢找出哪些字如

{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "match": { 
      "your_field": { 
       "query": "house", 
       "_name" : "house" 
      } 
      } 
     }, 
     { 
      "match": { 
      "your_field": { 
       "query": "garden", 
       "_name" : "garden" 
      } 
      } 
     }, 
     { 
      "match": { 
      "your_field": { 
       "query": "garage", 
       "_name" : "garage" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

匹配在結果檢查matched_queries領域,這將告訴你它匹配哪些單詞,然後你就可以找出哪些條款被省略了