Я реализую функцию поиска по мере ввода в следующем примере: Edge NGram с сопоставлением фраз .
Я чувствую, что время запроса связано с количеством соответствующих документов, хотя я запрашиваю только 5 лучших документов.
В моем индексе 320 миллионов документов. Когда мой запрос равен «l», 6 миллионов документов соответствуют запросу, и для выполнения запроса требуется 22 мс. Однако, когда мой запрос «а», 133 миллиона документов соответствуют запросу, и это занимает 400 мс. Опять же, я прошу только 5 лучших документов.
См. ниже определение моего индекса и запрос.
Я пытаюсь сделать все мои запросы менее 100 мс. Как мне этого добиться? Что мне не хватает?
Вот мое определение индекса:
`
PUT /ss
{
"settings": {
"analysis": {
"filter": {
"english_poss_stemmer": {
"type": "stemmer",
"name": "possessive_english"
},
"edge_ngram": {
"type": "edgeNGram",
"min_gram": "1",
"max_gram": "25",
"token_chars": [
"letter",
"digit"
]
}
},
"analyzer": {
"edge_ngram_analyzer": {
"filter": [
"lowercase",
"english_poss_stemmer",
"edge_ngram"
],
"tokenizer": "standard"
},
"my_standard": {
"filter": [
"lowercase",
"english_poss_stemmer"
],
"tokenizer": "standard"
}
}
}
},
"mappings": {
"ss": {
"_all": {
"enabled": false
},
"properties": {
"name": {
"search_analyzer": "my_standard",
"analyzer": "edge_ngram_analyzer",
"type": "text"
},
"type": {
"search_analyzer": "keyword",
"analyzer": "keyword",
"type": "text"
},
"tax_id": {
"search_analyzer": "keyword",
"analyzer": "keyword",
"type": "text"
}
}
}
}
}
`
Вот мой запрос:
GET /ss/_search
{
"from": 0,
"size": 5,
"query": {
"bool": {
"must": {
"match_all": {}
},
"filter": {
"match_phrase": {
"name": "a"
}
}
}
}
}