Elasticsearch "поиск" основан исключительно на поиске по ключевым словам.
Однако вы получаете некоторую NLP, например, для извлечения или сбора данных, извлечения необходимой информации, токенизации, удаления стоп-слов (все это выполняется анализатором), вычисления подобия (с использованием tf-idf).и модель векторного пространства).
Дальнейший процесс НЛП состоит из разработки модели, обучения этой модели, классификации текстовых данных и т. Д. Я не думаю, что в Elasticsearch есть механизм, который может это сделать (Существует реализация, называемая MLT (More Like This) но я не уверен, как это работает (еще не читал)) .
То, что вы можете сделать, это использоватьasticsearch в качестве источника для вашего механизма НЛП, если вы в конечном итоге создадите его, опять же, для которого вам не нужно реализовывать базовые этапы, как указано выше.
Выможете проверить этот блог , что довольно интересно.
Независимо от того, что сказано и сделано, глядя на ваш вариант использования, я пришел к следующему запросу.Я знаю, что это не точное решение, но оно дало бы результат, который вы ищете.
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"multi_match": {
"query": "law",
"fields": [ "type", "place", "name"],
"type": "most_fields"
}
},
{
"multi_match": {
"query": "firm",
"fields": [ "type", "place", "name"],
"type": "most_fields"
}
},
{
"multi_match": {
"query": "boston",
"fields": [ "type", "place", "name"],
"type": "most_fields"
}
}
]
}
}
}
То, что я сделал, просто сделало создание условия must для каждого слова, используя отправленный вами запрос.Это гарантирует, что вы не получите нежелательных результатов, которые ищете.
Дайте мне знать, если это поможет!