ネストされたフィールドを含むドキュメントを検索しようとしています。次のようなネストされたマッピングを作成しました。
{
"message": {
"properties": {
"messages": {
"type": "nested",
"properties": {
"message_id": { "type": "string" },
"message_text": { "type": "string" },
"message_nick": { "type": "string" }
}
}
}
}
}
私の検索は次のようになります。
curl -XGET 'localhost:9200/thread_and_messages/thread/_search' \
-d '{"query": {"bool": {"must": [{"match": {"thread_name": "Banana"}}, {"nested": {"path": "messages", "query": {"bool": {"must": [{"match": {"messages.message_text": "Banana"}}]}}}]}}}}'
それでも、私はこのエラーメッセージを受け取っています:
QueryParsingException[[thread_and_messages] [nested] nested object under path [messages] is not of nested type]
[〜#〜] edit [〜#〜]
引き続きこのエラーが表示されます。 Java経由でこれを行っているため、これが作成しようとしているドキュメントです。
{
"_id": {
"path": "3",
"thread_id": "3",
"thread_name": "Banana",
"created": "Wed Mar 25 2015",
"first_nick": "AdminTech",
"messages": [
{
"message_id": "9",
"message_text": "Banana",
"message_nick": "AdminTech"
}
]
}
}
次のようにインデックスを作成します。
CreateIndexRequestBuilder indexRequest = client.admin().indices().prepareCreate(INDEX).addMapping("message", mapping);
ドキュメントのインデックスを誤っている可能性があります。
TLDR:"type": "nested",
をネストされた型に入れます。
通常のタイプと、その中にネストされた別のタイプがあるとします。
{
"some_index": {
"mappings": {
"normal_type": {
"properties": {
"nested_type": {
"type": "nested",
"properties": {
"address": {
"type": "string"
},
"country": {
"type": "string"
}
}
},
"first_name": {
"type": "string"
},
"last_name": {
"type": "string"
}
}
}
}
}
}
"type": "nested",
に割り当てられた"path":
を持つネストされたクエリが機能するには、次のようにnested_type
行が必要です。
GET /some_index/normal_type/_search
{
"query": {
"nested": {
"query": {
"bool": {}
},
"path": "nested_type"
}
}
}
"type": "nested",
行は、新しいElasticsearchバージョンでのみ必要と思われます(1.1.1以降?)。
クエリDSLの構文エラー。 must_blockの不適切な終了query->bool->must
{
"query": {
"bool": {
"must": [
}// Should be ]
}
}
}
正しいバージョンクエリは次のとおりです。
curl -XGET 'localhost:9200/thread_and_messages/thread/_search' -d '{
"query": {
"bool": {
"must": [
{
"match": {
"thread_name": "Banana"
}
},
{
"nested": {
"path": "message",
"query": {
"bool": {
"must": [
{
"match": {
"messages.message_text": "Banana"
}
}
]
}
}
}
}
]
}
}
}'