2014-04-15 46 views
2

我想知道如果有兩個查詢類型組合的可能性,在我來說,我需要一個比賽通配符查詢,每個人都有對不同領域工作。Elasticsearch結合兩種不同的查詢類型的一個請求

問題是,如果實體名稱(文檔是實體的表示形式)與搜索詞語結尾處的通配符名稱匹配,則匹配文檔,或者匹配其中一個匹配的文檔該實體的同義詞。不是兩個querys必須匹配,只是其中一個考慮該文件是相關的。

目前我需要兩個請求歸檔此:

通配符:

GET /name/type/_search 
{ 
    "query": { 
     "wildcard": { 
     "name": { 
      "value": "term*", 
      "boost": 2 
     } 
     } 
    } 
} 

比賽:

GET /name/type/_search 
{ 
    "query": { 
     "match": { 
     "synonyms": "term" 
     } 
    } 
} 

有沒有辦法用一個請求做呢?我的所有測試均失敗。

+0

有一個看看'bool'查詢[SO答案](http://stackoverflow.com/questions/13363709/how-to-join-2-match-queries-into-a-query- for-elasticsearch/13363814#13363814) – Thorsten

+0

使用bool查詢兩個查詢都必須匹配,在我的情況下,它們中的一個必須匹配才能將文檔視爲有效匹配。我更新了這個問題來指出這一點。謝謝。 – maddin2code

+2

然後使用'should'而不是'must'。請參閱[文檔](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html#query-dsl-bool-query)。 – Thorsten

回答

4

這是你正在尋找..!

curl -XPOST "http://localhost:9200/try/_search" -d' 
{ 
    "query": { 
    "bool": { 
     "should": [ 
     { 
      "wildcard": { 
      "name": { 
       "value": "term*", 
       "boost": 2 
      } 
      } 
     }, 
     { 
      "match": { 
      "synonyms": "term" 
      } 
     } 
     ] 
    } 
    } 
}' 
+0

正確,@Thorsten指出了這個方向。謝謝。 – maddin2code

相關問題