Я бы пошел с помощью специального анализатора, используя ngrams. Сначала нужно создать индекс, как это:
curl -XPUT 'localhost:9200/tests' -d '
{
"settings" : {
"analysis" : {
"analyzer" : {
"my_analyzer" : {
"tokenizer" : "ngrams"
}
},
"tokenizer" : {
"ngrams" : {
"type" : "nGram",
"min_gram" : "2",
"max_gram" : "10"
}
}
}
},
"mappings": {
"test": {
"properties": {
"product_name": {
"type": "string",
"analyzer": "standard",
"search_analyzer": "my_analyzer"
}
}
}
}
}'
Затем вы можете индексировать некоторые данные:
curl -XPOST 'localhost:9200/tests/test/_bulk' -d '
{"index":{}}
{"product_name": "bc"}
{"index":{}}
{"product_name": "cd"}
{"index":{}}
{"product_name": "def"}
'
И, наконец, вы можете найти, как этот:
curl -XPOST 'localhost:9200/tests/_search' -d '{
"query": {
"match": {
"product_name": "abcde"
}
}
}'
И вы получите первые два документа bc
и cd
Прочтите [документацию] (https: //www.el astic.co/guide/en/elasticsearch/guide/current/partial-matching.html). –
Я не уверен, как это может мне помочь Мне не нужен: текст LIKE «% quick%», мне нужно обратное (см. Вопрос –
Можете ли вы подробно остановиться на примере. Что-то вроде 3 документов с названиями продуктов: abcmilkman, abcman, человек и т. д. Вы хотите, чтобы первые два документа были возвращены в качестве результата? Если это так, то запрос sql кажется немного выключенным, я имею в виду, что он не должен «выбирать» из продуктов, где «product_name», % '+ milk +'% ''? Или у меня все получилось неправильно –