Упрощенный поисковый запрос, соответствующий первому поисковому запросу
Я использую PyElasticsearch
(библиотека клиента pythonasticsearch). Я ищу такие строки, как Arvind Kejriwal India Today Economic Times, и это дает мне разумные результаты. Я надеялся, что смогу увеличить вес первых слов в поисковом запросе. Как я могу это сделать?
res = es.search(index="article-index", fields="url", body={
"query": {
"query_string": {
"query": "keywordstr",
"fields": [
"text",
"title",
"tags",
"domain"
]
}
}
})
Я использую вышеупомянутую команду для поиска прямо сейчас.
3 ответа
Lucene Query Syntax делает свое дело. Спасибо
Разбить данный запрос на несколько терминов. В вашем примере это будет Arvind, Kejriwal... Теперь формируйте запросы строки запроса (или поля запроса или любой другой, который соответствует потребности) для каждого из заданных терминов. Запрос строки запроса будет выглядеть следующим образом: http://www.elasticsearch.org/guide/en/elasticsearch/reference/0.90/query-dsl-query-string-query.html
{
"query_string" : {
"default_field" : "content",
"query" : "<one of the given term>",
"boost": <any number>
}
}
Теперь у вас есть несколько запросов, как указано выше, с разными значениями повышения (в зависимости от того, какой из них имеет больший вес). Объедините все эти запросы в один запрос, используя запрос BOOL. http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html Если вы хотите, чтобы все термины присутствовали в результате, запрос будет выглядеть следующим образом.
{
"bool" : {
"must" : [q1, q2, q3 ...]
}
}
Вы можете использовать различные параметры запроса bool. например, вы хотите, чтобы в результате было представлено любое из трех условий, тогда запрос будет выглядеть так:
{
"bool" : {
"should" : [q1, q2,q3 ...]
},
"minimum_should_match" : 3,
}
Теоретически:
- разделить на термины с помощью API
- запрос по условиям с разным повышением