0

Ruby on Railsプロジェクトの 1つで ElasticSearchを使用しています。ElasticSearchの場合、query_stringを多用しています

以下は私のプロジェクト設定です:

Ruby-2.2.4、Rails-4.2.0、ElasticSearch-Model-0.1.8

私はすでにデータにインデックスを付けました。Article.import の使用

現在、コンソールで、公開されているすべての記事数を取得しています。次を使用しています。

Article.search(query: { query_string: { query: {"status:1"} } })

これはうまくいきます!ここで、 user_idsで記事を検索したいと思います

上記のSQLは魅力的に機能しています!

SELECT * FROM articles WHERE articles.user_id IN (5, 10)

しかし、query_stringに同じ概念を使用しようとすると、うまくいきません!!

Article.search(query: { query_string: { query: "status:1 AND user_id:[5, 10]" } })

これにより、結果が得られます。

Elasticsearch::Transport::Transport::Errors::BadRequest: [400] {"error":"SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures {[mUk_rhx-RP6G5sJRMpfDwg][articles][0]: SearchParseException[[articles][0]: from[-1],size[-1]: Parse Failure [Failed to parse source [{\"query\":{\"query_string\":{\"query\":\"status:1 AND user_id:[5,10]\"}}}]]]; nested: QueryParsingException[[articles] Failed to parse query [status:1 AND user_id:[5,10]]]; nested: ParseException[Cannot parse 'status:1 AND user_id:[5,10]': Encountered \" \"]\" \"] \"\" at line 1, column 98.\nWas expecting one of:\n    \"TO\" ...\n    <RANGE_QUOTED> ...\n    <RANGE_GOOP> ...\n    ];

この作業を行うために正確に何をする必要があるかを理解するのを手伝ってください! RANGE、TOなどのいくつかのオプションが見つかりましたが、これは見つかりませんでした:(

ご連絡をお待ちしております。

4

1 に答える 1

2

その場合は使用query_stringしないでください。terms query代わりに使用してください。複数のクエリを組み合わせるにはbool

{
"query": {
  "bool": {
     "must": [
        {
           "term": {
              "status": 1
           }
        },
        {
           "terms": {
              "user_id": [
                 5,
                 10
              ]
           }
        }
       ]
     }
    }
  }
于 2016-03-02T11:14:23.710 に答える