弹性搜索提升对应于第一个搜索词的查询

时间:2014-03-18 10:18:01

标签: elasticsearch pyelasticsearch

我正在使用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"
      ]
    }
  }
})

我现在正在使用上面的命令进行搜索。

3 个答案:

答案 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)

理论上:

  1. 使用api
  2. 拆分成条款
  3. 查询具有不同提升的条款

答案 2 :(得分:0)