Поиск по суффиксам крайне нежелателен по причинам производительности, как объяснено в официальном документе :
Для предотвращения очень медленных запросов с подстановочными символами термин с подстановочными символами не должен начинаться с одного из символов подстановки * или?
Есть еще способ достичь того, что вы хотите, с помощью искусно созданного анализатора. Идея состоит в том, чтобы индексировать только конец minhash. Вы можете достичь этого, как описано ниже.
Сначала создайте индекс с помощью следующего анализатора:
PUT minhash-index
{
"settings": {
"index": {
"analysis": {
"analyzer": {
"suffix": {
"type": "custom",
"tokenizer": "keyword",
"filter": [
"lowercase",
"reverse",
"substring",
"reverse"
]
}
},
"filter": {
"substring": {
"type": "edgeNGram",
"min_gram": 1,
"max_gram": 10
}
}
}
}
},
"mappings": {
"doc": {
"properties": {
"minhash": {
"type": "text",
"analyzer": "suffix",
"search_analyzer": "standard"
}
}
}
}
}
Идея suffix
анализатора заключается в том, что он будет индексировать все суффиксы длины от 1 до 10 (вы можете решить индексировать более длинные суффиксы) для каждого minhash, который вы добавили в свой индекс.
Так, например, для minhash C50FD711C2C43287351892A4D82F44B055F048C46D2C54197AC1D1E921F11E6699C4057C4B93907518E6DCA51A672D3D3E419160DAE276CB7716D11B94D8C3BB2E4A591329B7AF973D17A7F9336342FFAAFD4D
он будет индексировать все следующие суффиксы:
d
4d
d4d
fd4d
afd4d
aafd4d
faffd4d
ffaafd4d
2ffaafd4d
42ffaafd4d
Тогда вы можете легко найти и найти вышеупомянутый minhash с помощью следующего запроса:
POST minhash-index/_search
{
"query": {
"match": {
"minhash": "42FFAAFD4D"
}
}
}