2

mongoid- elasticsearch と ElasticSearch 2.0を使用して、ネストされたフィールドに用語クエリを適用しようとしています。試行錯誤があまり報われず、この件に関するドキュメントがかなりまばらであるため、これは非常にイライラするようになりました. これが私のクエリです:

  {
    "query": {
      "nested": {
        "path": "awards",
        "query": {
          "bool": {
            "must": [
              { "match": { "awards.year":  "2010"}}
            ]
          }
        }
      },
      "nested":{
        "path": "procuring_entity",
        "query": {
          "bool": {
            "must": [
              { "terms": { "procuring_entity.country": ["ES", "PL"]}}
            ]
          }
        }
      }
    }
  }

"match" と "term" は問題なく動作しますが、"terms" クエリと組み合わせると、本来あるべきだと思っても結果が返されません。私のマッピングは次のようになります。

  elasticsearch!({
    prefix_name: false,
    index_name: 'documents',
    index_options: {
      mappings: {
        document: {
          properties: {
            procuring_entity: {
              type: "nested"
            },
            awards: {
              type: "nested"
            }
          }
        }
      }
    },
    wrapper: :load
  })

「ネストされた」がアナライザーとしてカウントされない場合 (私の知る限り、そうではありません)、問題はありません。2番目の例については、一致する値の配列が外部から取得されるため、そうではないと思います。ネストされたフィールドで用語クエリは可能ですか? 私は何か間違ったことをしていますか?ネストされたフィールドを複数の値と照合する他の方法はありますか?

どんな考えでも大歓迎です。

4

1 に答える 1

1

これには、ネストされた型のマッピングを変更する必要があると思います-クエリという用語はフィールドでのみ機能しnot_analyzedます。マッピングを次のように更新すると:

elasticsearch!({
    prefix_name: false,
    index_name: 'documents',
    index_options: {
    mappings: {
        document: {
            properties: {
                procuring_entity: {
                    type: 'nested',
                    properties: {
                        country: {
                            'type': 'string',
                            'index': 'not_analyzed'
                        }
                    }
                },
                awards: {
                    type: 'nested'
                }
            }
        }
    }
    },
    wrapper: :load
})

あなたがそれをすれば、クエリはうまくいくはずだと思います。

于 2015-11-23T20:11:52.590 に答える