我正在使用PyElasticsearch
(elasticsearch python客户端库)。我正在搜索 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"
]
}
}
})
我现在正在使用上面的命令进行搜索。
答案 0 :(得分:2)
将给定查询拆分为多个术语。在您的示例中,它将是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查询的不同选项。例如,您希望在结果中显示3个术语中的任何一个,则查询将类似于
{
"bool" : {
"should" : [q1, q2,q3 ...]
},
"minimum_should_match" : 3,
}
答案 1 :(得分:0)
理论上:
答案 2 :(得分:0)
Lucene查询语法可以解决问题。感谢
http://lucene.apache.org/core/2_9_4/queryparsersyntax.html#Boosting%20a%20Term