Elasticsearch Span_near с запросом bool
Мне нужно выяснить все документы, в которых есть слова "Лондон", "Гуччи" или "Мода". Но в то же время я не хочу, чтобы все те документы, которые имеют все или некоторые из этих 3 слов (все или 2 или 1), должны быть увеличены в баллах в зависимости от их близости... т.е.
- Док A - "Лондон большой. Gucci - бренд".
- Док Б - "Лондон большой".
- Док C - "Gucci - это модный бренд в Лондоне".
- Док D - "Показ мод Gucci в Лондоне".
Результат должен быть в порядке -
- Документ D (все 3 слова существуют, 2 слова вместе, 1 отдельно)
- Док C (все 3 слова существуют, каждое из них отдельно)
- Документ A (существует 2 слова, каждое из которых отдельно)
- Док B (1 слово существует)
Я пытаюсь следующий поиск -
{
"query": {
"bool": {
"should": [
{
"query_string": {
"default_field": "transcription",
"query": "\"Gucci\" OR \"Chinese\" OR \"London\""
}
},
{
"span_near": {
"clauses": [
{
"span_term": {
"transcription": "Gucci"
}
},
{
"span_term": {
"transcription": "Chinese"
}
},
{
"span_term": {
"transcription": "London"
}
}
],
"boost": 10,
"slop": 50,
"in_order": false
}
}
]
}
},
"highlight": {
"fields": {
"transcription": {
"type": "plain"
}
}
}}
Но я получаю только результаты в соответствии с query_string . Похоже, span_near не работает.. т. Е. Документы не повышаются в зависимости от близости.
Что здесь не так?