Как сделать инкрементальный поиск при вводе полнотекстового поиска по 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"
      }
    }
  }
}
Другие вопросы по тегам