這正是match_phrase
查詢(請參閱here)所做的。
它檢查條款的位置,在他們的存在之上。
例如,這些文件:
POST test/values
{
"test": "Hello World"
}
POST test/values
{
"test": "Hello nice World"
}
POST test/values
{
"test": "World, I don't say hello"
}
將全部使用基本match
查詢發現:
POST test/_search
{
"query": {
"match": {
"test": "Hello World"
}
}
}
但使用match_phrase
,只有第一個文件將被退回:
POST test/_search
{
"query": {
"match_phrase": {
"test": "Hello World"
}
}
}
{
...
"hits": {
"total": 1,
"max_score": 2.3953633,
"hits": [
{
"_index": "test",
"_type": "values",
"_id": "qFZAKYOTQh2AuqplLQdHcA",
"_score": 2.3953633,
"_source": {
"test": "Hello World"
}
}
]
}
}
在你的情況下,你想接受有您的條款之間有一段距離。這可以通過slop
參數,這表明你允許多遠,你的條件是一個從另一個來實現:
POST test/_search
{
"query": {
"match": {
"test": {
"query": "Hello world",
"slop":1,
"type": "phrase"
}
}
}
}
利用這最後的要求,你會發現第二個文檔太:
{
...
"hits": {
"total": 2,
"max_score": 0.38356602,
"hits": [
{
"_index": "test",
"_type": "values",
"_id": "7mhBJgm5QaO2_aXOrTB_BA",
"_score": 0.38356602,
"_source": {
"test": "Hello World"
}
},
{
"_index": "test",
"_type": "values",
"_id": "VKdUJSZFQNCFrxKk_hWz4A",
"_score": 0.2169777,
"_source": {
"test": "Hello nice World"
}
}
]
}
}
你可以在definitive guide中找到關於此用例的完整章節。
想要添加一些帶通配符的query_string,這個必須更好! – 2014-10-30 21:49:15
非常感謝。它確實有效。雖然我希望有一種方法可以做到,但沒有指定坡度值,但我知道我可以通過設置坡度這麼高的價值來作弊。 – Artur 2014-10-31 10:39:32