Ответ 1
Согласно версии 1.2.0, вы можете добавить контекст к вашему предложителю и получить отфильтрованные предложения.
Кто-нибудь знает, как добавить фильтр в рекомендацию?
Это работает очень хорошо:
{
"headline-suggest" : {
"text" : "n",
"completion" : {
"field" : "headline_suggest"
}
}
но я хочу заставить ElasticSearch строить список предложений из подмножества данных, например:
{
"headline-suggest" : {
"text" : "n",
"completion" : {
"field" : "headline_suggest"
}
},
"filter" : {
"term" : { "mydifferentfield" : "someword" }
}
}
Как я могу это достичь?
(Я использую elasticsearch 0.90.5)
Согласно версии 1.2.0, вы можете добавить контекст к вашему предложителю и получить отфильтрованные предложения.
Я не уверен в этом, но думаю, что вы не можете отфильтровать запрос запроса в elasticsearch.
из того, что я прочитал, это связано с тем, какая структура данных хранится в нем. elasticsearch вычисляет статистические данные о сроках, которые следует предлагать во время индекса, и использует те, которые используются для операций предложения.
Вы пытались выполнить обычный запрос в сочетании с предложением? может быть, есть другой результат?
curl -s -XPOST 'localhost:9200/_search' -d '{
"query" : {
...
},
"suggest" : {
...
}
}'
Невозможно фильтровать по вашему завершению. Как сказал Джаванна, функция Completion построена на FST при индексировании, поэтому вы не можете использовать фильтр здесь.
Чтобы сделать это, вы можете играть с ngram/edge ngram. Давайте прочитаем здесь, чтобы получить основную идею: http://jontai.me/blog/2013/02/adding-autocomplete-to-an-elasticsearch-search-application/