Возможно, вам захочется немного почитать о том, как работает analysis.
Также ознакомьтесь с этим описанием phrase matching. Термины во фразе не должны появляться в точной последовательности вашего запроса, первая должна просто появиться перед второй. Поскольку есть "hello"
, который приходит после "world"
, документ соответствует вашему запросу.
Также обратите внимание, что здесь используется standard analyzer, как при индексировании документа, так и при анализе запроса, поскольку никаких других анализаторов не указано. Вы можете настроить это поведение, если хотите.
Как простой пример, я создал тривиальный индекс:
PUT /test_index
затем индексированный документ (с новой строкой бежала):
PUT /test_index/doc/1
{
"doc_text": "Hello World and \n\nbmw Master World\n\nHello"
}
затем проиндексирован еще один с последним «Hello» удален :
PUT /test_index/doc/2
{
"doc_text": "Hello World and \n\nbmw Master World"
}
Теперь, если я запустил ваш запрос, возвращается только первый документ:
POST /test_index/_search
{
"query": {
"match_phrase": {
"doc_text": "World Hello"
}
}
}
...
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 1,
"successful": 1,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.4459011,
"hits": [
{
"_index": "test_index",
"_type": "doc",
"_id": "1",
"_score": 0.4459011,
"_source": {
"doc_text": "Hello World and \n\nbmw Master World\n\nHello"
}
}
]
}
}
Вы можете сами доказать, почему это происходит, используя term vectors. Я не буду вдаваться в подробности здесь, но вот некоторый код, который вы можете использовать, чтобы исследовать, если вы хотите:
http://sense.qbox.io/gist/3ee955b8389d1b36ea56788654955c519e2bb429
так, это документ 3 строки? не могли бы вы показать свои сопоставления? но, я уверен, это потому, что для индекса это просто большая строка слов, разделенных разделителями – Mysterion