Предложение поиска Elasticsearch по полю массива с частичным завершением граничной диаграммы
Я пытаюсь создать суггестер на основе массивов строк в моих документах, он похож на этот, но с несколькими отличиями:completion suggester
from Elasticsearch не совсем то, что я хочу (с точки зрения фильтрации и сопоставления префиксов), так как мне нужна граничная ngram, которая будет работать с любым словом предложения без учета акцента. Позвольте мне пояснить на примере.
Предположим, у меня есть следующие проиндексированные документы. Я хочу предложить "теги" на основе запросаq
(Меня не интересует сам документ, только tag
s, которые соответствуют моему запросу)
[
{ "tags": [ "société générale", "consulting" ] },
{ "tags": [ "big data", "big", "data"] },
{ "tags": [ "data" ] },
{ "tags": [ "data engineering" ] }
{ "tags": [ "consulting and management of IT" ] }
]
Я хочу сопоставить префикс с допустимым акцентом, и следующий запрос / ответы подчеркивают, что мне нужно
- (1)
q = "societe"
илиq = "societe generale"
должен вернуться[ "société générale" ]
-> нечувствительность к акценту - (2)
q = "big data"
должен вернуться[ "big data" ]
-> оба префикса "большой" и "данные" должны быть в строке - (3)
q = "data"
должен вернуться[ "big data", "data", "data engineering" ],
-> в любом месте предложения (но как префикс) - (4)
q = "ata"
не должен ничего возвращать (не префикс) - (5)
q = "IT consulting"
должен вернуться[ "consulting and management of IT" ]
-> оба префиксаq
должны совпадать независимо от порядка
Если я использую обычный completion
картограф + наводчик,
# assuming a mapping of "tags", of type 'completion' is configured in my ES
{
suggest: {
text: "big data",
tags: {
completion: {
field: "tags",
},
},
почти ни один из этих случаев не работает, кроме (2), (4) и 1/3 результатов из (3)
Могу ли я создать настраиваемого суггестера или настраиваемого поискового запроса, который удовлетворял бы моим требованиям и приведенным выше примерам?