В настоящее время я использую следующий запрос -
{
"_source": [
"title",
"bench",
"id_",
"court",
"date",
"content"
],
"size": 15,
"from": 0,
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "the",
"fields": [
"content"
], "operator": "and"
}
},
],
"should": {
"multi_match": {
"query": "the",
"fields": [
"content.standard^2"
], "operator": "and"
}
}
}
}
,
"highlight": {
"pre_tags": [
"<tag1>"
],
"post_tags": [
"</tag1>"
],
"fields": {
"content": {}
},
"fragment_size": 100
}
}
Со следующим отображением
{
"courts_2": {
"mappings": {
"properties": {
"author": {
"type": "text",
"analyzer": "my_analyzer"
},
"bench": {
"type": "text",
"analyzer": "my_analyzer"
},
"citation": {
"type": "text"
},
"content": {
"type": "text",
"fields": {
"standard": {
"type": "text"
}
},
"analyzer": "my_analyzer"
},
"court": {
"type": "text"
},
"date": {
"type": "text"
},
"id_": {
"type": "text"
},
"title": {
"type": "text",
"fields": {
"standard": {
"type": "text"
}
},
"analyzer": "my_analyzer"
},
"verdict": {
"type": "text"
}
}
}
}
}
Мой анализатор - анализатор Metaphone
. Вот моя цель. Я хочу, чтобы точные совпадения (стандартные) отображались первыми, а затем телефонные c. Я могу добиться этого с помощью кода. Я почти уверен, что в этом есть (есть) какая-то нежелательная логика c, и я был бы очень признателен, если бы кто-то мог на нее указать.
Кроме того, я хотел бы включить поисковую логику c где пользователь может ввести поиск, например
Реал Мадрид И Барселона ИЛИ Манчестер Юнайтед. Здесь я хочу получить все документы, которые содержат «Реал Мадрид» и «Барселона» / «Манчестер Юнайтед» / Как мне добиться с помощью текущего запроса (с изменениями)?