2

現在、統合テストで生成した非常に単純なドキュメントを ElasticSearch に保存しています。

{
  "took" : 1,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.0,
    "hits" : [ {
      "_index" : "unit-test_project600",
      "_type" : "recordDefinition505",
      "_id" : "400",
      "_score" : 1.0, "_source" : {
  "field900": "test string",
  "field901": "500",
  "field902": "2050-01-01T00:00:00",
  "field903": [
    "Open"
  ]
}
    } ]
  }
}

特に field903 と "Open" の値をフィルター処理したいので、次のクエリを実行します。

{
    query: {
        filtered: {
            filter: {
                term: {
                    field903: "Open",
                }
            }
        }
    }
}

これは結果を返しません。ただし、これを他のフィールドで使用すると、次のレコードが返されます。

{
    query: {
        filtered: {
            filter: {
                term: {
                    field901: "500",
                }
            }
        }
    }
}

ElasticSearch を使用して配列を検索できないようです。私は似たような問題を抱えている人々の例をいくつか読んだことがありますが、誰もそれを解決していないようです. 確かに、これは ElasticSearch の制限ではありませんか?

マッピングの問題かもしれないと思いました。これが私のマッピングです:

{
  "unit-test_project600" : {
    "recordDefinition505" : {
      "properties" : {
        "field900" : {
          "type" : "string"
        },
        "field901" : {
          "type" : "string"
        },
        "field902" : {
          "type" : "date",
          "format" : "dateOptionalTime"
        },
        "field903" : {
          "type" : "string"
        }
      }
    }
  }
}

ただし、ElasticSearch のドキュメントでは、文字列マッピングと配列マッピングに違いはないことが示されているため、ここで変更を加える必要はないと思います。

4

1 に答える 1

5

「オープン」ではなく「オープン」で検索してみてください。デフォルトでは、Elasticsearch はフィールドのインデックス作成時に標準のアナライザーを使用します。標準アナライザーは、こちらの例で説明されているように、小文字フィルターを使用します。私の経験から、Elasticsearch は配列を検索します。

于 2013-08-18T02:10:53.020 に答える