0

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"
      ]
    }
  }
})

上記のコマンドを使用して現在検索しています。

4

3 に答える 3

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 クエリを使用して、これらすべてのクエリを 1 つのクエリに結合します。http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-bool-query.html すべての用語を結果に表示する場合、クエリは次のようになります。

{
    "bool" : {
        "must" :  [q1, q2, q3 ...]
    }
}

ブールクエリのさまざまなオプションを使用できます。たとえば、3 つの用語のいずれかを結果に表示する場合、クエリは次のようになります

{
    "bool" : {
        "should" :  [q1, q2,q3 ...]
    },
    "minimum_should_match" : 3,
}
于 2014-03-18T15:42:41.543 に答える
0

理論的には:

  1. APIを使用して単語に分割する
  2. ブースティングが異なる用語に対するクエリ
于 2014-03-18T12:53:22.117 に答える