有沒有簡單的方法來做到這一點,你可以這樣做有兩種使用_analyze
端點span query
或script
和match_phrase
1)你通過搜索字符串_analyze與
curl -XGET 'localhost:9200/_analyze' -d '
{
"analyzer" : "my_custom_analyzer",
"text" : "one four"
}'
你會得到這樣的東西
{
"tokens": [
{
"token": "one",
"start_offset": 0,
"end_offset": 3,
"type": "<ALPHANUM>",
"position": 1
},
{
"token": "four",
"start_offset": 4,
"end_offset": 8,
"type": "<ALPHANUM>",
"position": 2
}
]
}
你然後將令牌傳遞到span query
{
"span_near" : {
"clauses" : [
{ "span_term" : { "field" : "token1" } },
{ "span_term" : { "field" : "token2" } }
],
"slop" : 2,
"in_order" : true,
"collect_payloads" : false
}
}
2)另一種方法是使用advanced scripting,看看@Andrei斯特凡爲this question答案,他用_POSITIONS
與match_phrase
找回的條款結果爲了。
希望這會有所幫助!
感謝您的回答。據我所知,@ AndreiStefan的解決方案要求在客戶端處理搜索字符串(標記),這是一個壞消息。我想我將不得不採用雙重請求解決方案。我可以編寫一個腳本來分析搜索字符串,並使用結果標記來完成Andrei Stefan的腳本的功能嗎? –
@ AndreiStefan的解決方案是一個單一的請求解決方案,您只需將所有術語傳遞給腳本並比較它們的位置,這種解決方案的缺點是腳本可能會影響性能 – ChintanShah25