Прежде всего, когда речь идет о корпусных данных, традиционные алгоритмы подобия или запросы, которые мы используем в ES, не учитывают положение терминов при вычислении релевантности.
Для позиционных запросов: вам нужно будет использовать Span Queries
Мне удалось найти следующее решение, которое должно работать в вашем случае. Обратите внимание, что я использовал запрос для поля companyName
, и я предполагаю, что он использует Стандартный анализатор .
Ниже приведены сопоставление, примеры документов, запрос и ответ. как это выглядит:
Отображение:
PUT my_company
{
"mappings": {
"properties": {
"companyName":{
"type":"text"
}
}
}
}
Образцы документов:
POST my_company/_doc/1
{
"companyName": "reckon infosystem private limited"
}
POST my_company/_doc/2
{
"companyName": "infosys"
}
POST my_company/_doc/3
{
"companyName": "telecom services infosystem private limited"
}
POST my_company/_doc/4
{
"companyName":"infosystems technological solution"
}
Запрос:
POST <your_index_name>/_search
{
"query": {
"bool": {
"must": [
{
"span_multi": {
"match": {
"wildcard": {
"companyName": "infosys*"
}
}
}
}
]
}
}
}
Обратите внимание, что я использовал подстановочный запрос внутри Span многоточечного запроса.
Вам может быть интересно, почему я не использовал поле trimmedCompanyName
, потому что, глядя на его отображение (даже если его text
тип с standard analyzer
), значения или содержимое в нем все рассматриваются как один термин и хранятся таким образом в перевернутом индексе.
Ответ:
{
"took" : 4,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 4,
"relation" : "eq"
},
"max_score" : 4.3264027,
"hits" : [
{
"_index" : "my_company",
"_type" : "_doc",
"_id" : "2",
"_score" : 4.3264027,
"_source" : {
"companyName" : "infosys"
}
},
{
"_index" : "my_company",
"_type" : "_doc",
"_id" : "4",
"_score" : 3.2018504,
"_source" : {
"companyName" : "infosystems technological solution"
}
},
{
"_index" : "my_company",
"_type" : "_doc",
"_id" : "1",
"_score" : 2.8335867,
"_source" : {
"companyName" : "reckon infosystem private limited"
}
},
{
"_index" : "my_company",
"_type" : "_doc",
"_id" : "3",
"_score" : 2.5412967,
"_source" : {
"companyName" : "telecom services infosystem private limited"
}
}
]
}
}
Дайте мне знать, если это поможет!