Самый простой способ достичь второго пункта, так как вы уже решили первый пункт, это обернуть ваш существующий запрос в логический запрос и поместить существующий запрос и новый запрос термина в условие must с minimum_should_match 1
.Таким образом, он предоставит вам второй вариант.Если вам нужен рабочий пример, вам нужно предоставить свое сопоставление, один или два документа в качестве образца и свой запрос в данный момент.
Ваш вариант использования очень широк.Вы могли бы поместить все возможные анализаторы и все еще пропустить вещи.Я считаю, что вам не нужны все эти анализаторы или какой-либо сложный запрос.Ниже очень просто (хотя нужно соблюдать осторожность в отношении производительности).
PUT testindex
{
"settings": {
"analysis": {
"analyzer": {
"keyword_lowercase": {
"tokenizer": "keyword",
"filter": [
"lowercase"
]
}
}
}
},
"mappings": {
"test": {
"properties": {
"hostname": {
"type": "text",
"analyzer": "keyword_lowercase"
}
}
}
}
}
GET testindex/_search
{
"query": {
"wildcard": {
"hostname": {
"value": "*test*"
}
}
}
}
GET testindex/_search
{
"query": {
"wildcard": {
"hostname": {
"value": "*dell*power*"
}
}
}
}
GET testindex/_search
{
"query": {
"wildcard": {
"hostname": {
"value": "*edge*"
}
}
}
}
В общем, вы можете использовать ребра-нграммы, но это не будет охватывать пример edge
, так как они начинаются с начала,Вы можете использовать ngrams, но max 3
недостаточно, и будут случаи, которые вы пропустите.При таком подходе вы охватите практически все.Что вам нужно сделать на уровне приложения, это для заданного вами ввода: 1. строчные буквы 2. оберните ввод подстановочными знаками
Примеры:
Dell
-> *dell*
SERVER
-> *server*
DELL POWER
-> *dell power*
Будьте осторожны, хотя в некоторых случаях вы все равно пропустите Пример:
server testing
-> *server testing*
Выше не будет работать.Если вам нужно, чтобы он работал, то вы можете добавить подстановочный знак на каждый пробел, тогда приведенное выше становится следующим:
server testing
-> *server*testing*
, который будет работать
При таком подходе индекс будет меньше, но вы будете платить за поиск во время поиска, в зависимости от размера ваших данных и объема запросов.Вы можете попробовать его.
В общем, запрос с подстановочными знаками несколько ядерный, поэтому действуйте осторожно.Другой подход - увеличить максимум для вас, нграмм, но это значительно увеличит ваш индекс.Я на самом деле не знаю вашего дела, так что ... просто посмотрите сами.