Учитывая поисковый запрос / строку, я хотел бы запросить два поля с Elasticsearch, учитывая некоторую степень нечеткости.
У меня есть поля «имя» и «фамилия» (и избыточно также объединены в другое поле «полное имя»):
{
"settings": {
"analysis": {
"filter": {
"nGram_filter": {
"type": "nGram",
"min_gram": 3,
"max_gram": 20,
"token_chars": [ "letter", "digit", "punctuation", "symbol" ]
}
},
"analyzer": {
"nGram_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [ "lowercase", "asciifolding", "nGram_filter" ]
},
"whitespace_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [ "lowercase", "asciifolding" ]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"lastname": {
"type": "keyword"
"fields": {
"partial": {
"type": "text",
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
}
}
},
"firstname": {
"type": "keyword"
"fields": {
"partial": {
"type": "text",
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
}
}
},
"fullname": {
"type": "text",
"analyzer": "nGram_analyzer",
"search_analyzer": "whitespace_analyzer"
}
...
Я хотел бы запросить эти два поля сСтрока, требуя максимального отклонения.Так, например, для firstname = "John" и lastname = "Test", следующие запросы должны возвращать запись:
"John Test"
"John Tes"
"John Testx"
"Joh Test"
"Johx Test"
Другая строка запроса с большим количеством "deviation", однако, не должна возвращать результат:
"John Texx"
"John T"
"John"
"Test"
Я пробовал разные подходы с нечеткостью, но не смог заставить его работать.
У кого-нибудь есть идеи, как мне указать индекс и / или запрос?Заранее большое спасибо!