Спасибо за точность.
Чтобы использовать перколятный запрос в вашем случае, вам необходимо:
- Создать индекс, определяющий отображение вашей статьи, информацию о вашемusers и percolator query, соответствующий предпочтениям пользователя.
PUT /percolated_queries_index
{
"mappings": {
"properties": {
"article": {
// Mapping for your article
},
"query": {
"type": "percolator"
},
"user": {
// Mapping for the information related to the user
}
}
}
}
Поле article
является обязательным, поскольку документы статьи, которые вы будете фильтровать, будут использовать это отображение.Вероятно, это должно быть то же отображение, которое вы используете в индексе article
.Как упомянуто в документации, вы должны видеть это отображение как предварительную обработку документа, который вы будете сопоставлять.Например, вам нужно будет указать анализатор стволов здесь.
индексировать для каждого пользователя поисковый запрос, соответствующий его пользовательскому предпочтению, в поле
percolator
.
PUT /percolated_queries_index/_doc
{
"query" : {
// The elasticsearch query corresponding to the user preferences
},
"user": {
// Information for the user, e.g., id, email
}
}
Запрос соответствует пользовательским предпочтениям, переписанным как запрос эластичного поиска.Например, запрос на совпадение для автора статьи и логические запросы для ключевых слов AND, OR, NOT.Это будет, вероятно, трудная часть, потому что вам придется написать что-то, что преобразует пользовательский запрос в запрос эластичного поиска.Если вы можете использовать синтаксис строки запроса , это должно быть намного проще.
Не следует устанавливать здесь поле article
.
Когда новая статья проиндексирована, выполните поисковый запрос
percolate
, используя эту статью в параметре
document
.Если статья уже проиндексирована, вы также можете напрямую использовать ее идентификатор (синтаксис приведен в документе).
GET /percolated_queries_index/_search
{
"query" : {
"percolate" : {
"field" : "query",
"document" : {
// The content of the article
}
}
}
"_source": "user"
}
Ответ на этот запрос вернет документы, содержащие запрос, соответствующий запросу.документ статьи, включающий информацию пользователя, соответствующую статье.Поскольку вас обычно не интересует сам поисковый запрос, вы можете выполнить фильтрацию, чтобы получить только поле user
.
Ответ на этот запрос даст вам всех пользователей, которым будет отправлена новая статья..