Как сделать инкрементальный поиск при вводе полнотекстового поиска по 5 миллионам наборов записей с помощью поиска Elastic
Я использую упругий поиск по огромному набору данных по всем именам статей в Википедии. Их число составляет около 5 миллионов. Имя поля базы данных - articlenames
curl -XPUT "http://localhost:9200/index_wiki_articlenames/" -d'
{
"settings":{
"analysis":{
"filter":{
"nGram_filter":{
"type":"edgeNGram",
"min_gram":1,
"max_gram":20,
"token_chars":[
"letter",
"digit",
"punctuation",
"symbol"
]
}
},
"tokenizer":{
"edge_ngram_tokenizer":{
"type":"edgeNGram",
"min_gram":"1",
"max_gram":"20",
"token_chars":[
"letter",
"digit"
]
}
},
"analyzer":{
"nGram_analyzer":{
"type":"custom",
"tokenizer":"edge_ngram_tokenizer",
"filter":[
"lowercase",
"asciifolding"
]
}
},
"whitespace_analyzer": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [
"lowercase",
"asciifolding"
]
}
}
},
"mappings":{
"name":{
"properties":{
"articlenames":{
"type":"text",
"analyzer":"nGram_analyzer"
}
}
}
}
}'
Ссылки на эти ссылки, чтобы решить мою проблему, но напрасно
Edge NGram с соответствием фраз
https://hackernoon.com/elasticsearch-building-autocomplete-functionality-494fcf81a7cf
моя цель состоит в том, чтобы получить результаты как ниже для входного запроса "sachin t"
sachin tendulkar
sachin tendulkar centuries
sachin tejas
sachin top 60 quotes
sachin talwalkar
sachin tawade
sachin taps
и для запроса "sachin te"
sachin tendulkar
sachin tendulkar centuries
sachin tejas
и для запроса "Сачин та"
sachin talwalkar
sachin tawade
sachin taps
и по запросу "сачин тен"
sachin tendulkar
sachin tendulkar centuries
Помните, что набор данных огромен, некоторые названия статей и слов могут содержать специальные символы и такие слова, как "Бронислав-Коморовский"
Я могу получить вывод для меньшего набора данных до 100 тысяч записей, но как только мой набор данных изменится на 0,5-5 миллионов записей, я не смогу получить вывод
и мой запрос
http://127.0.0.1:9200/index_wiki_articlenames/_search?&q=articlenames:sachin-t+articlenames:sachin-t.*&filter_path=hits.hits._source.articlenames&size=50
1 ответ
Я знаю, что уже слишком поздно, но любой, кто ищет решение, может попробовать этот запрос. Отображение и индекс верны. Кажется, отсутствует и оператор в разделе запроса.
GET index_wiki_articlenames/_search
{
"query": {
"match": {
"articlenames": {
"query": "sachin ten",
"operator": "and"
}
}
}
}
Это приводит к
sachin tendulkar
sachin tendulkar centuries
Вы должны попробовать эти настройки:
curl -XPUT "http://localhost:9200/index_wiki_articlenames/" -d'
{
"settings":{
"analysis":{
"tokenizer":{
"edge_ngram_tokenizer":{
"type":"edgeNGram",
"min_gram":"1",
"max_gram":"20",
"token_chars":[
"letter",
"digit"
]
}
},
"analyzer":{
"nGram_analyzer":{
"type":"custom",
"tokenizer":"edge_ngram_tokenizer",
"filter":[
"lowercase",
"asciifolding"
]
}
}
}
},
"mappings":{
"name":{
"properties":{
"articlenames":{
"type":"text",
"analyzer":"nGram_analyzer",
"search_analyzer": "standard"
}
}
}
}
}'
Также при запросе попробуйте этот запрос:
GET my_index/_search
{
"query": {
"match": {
"articlenames": {
"query": "Sachin T",
"operator": "and"
}
}
}
}