4

ElasticSearch を試しています。ネストされたオブジェクトのクエリに問題があります。

私のマッピング:

curl -X GET http://localhost:9200/testt/resource/_mapping?pretty

{
    "resource": {
        "properties": {
            "bib": {
                "type": "nested",
                "properties": {
                    "IssueDate": {
                        "type": "date",
                        "format": "dateOptionalTime"
                    },
                    "Title": {
                        "type": "string"
                    }
                }
            },
            "name": {
                "type": "string"
            }
        }
    }
}

インデックス付きのリソースが 1 つあります。

curl -X GET http://localhost:9200/testt/resource/_search?pretty

{
    "took": 1,
    "timed_out": false,
    "_shards": {
        "total": 5,
        "successful": 5,
        "failed": 0
    },
    "hits": {
        "total": 1,
        "max_score": 1.0,
        "hits": [
            {
                "_index": "testt",
                "_type": "resource",
                "_id": "1234",
                "_score": 1.0,
                "_source": {
                    "name": "SSS",
                    "bib": {
                        "Title": "XSD",
                        "IssueDate": "2012-12-19"
                    }
                }
            }
        ]
    }
}

curl -X GET http://localhost:9200/testt/resource/1234?pretty

{
    "_index": "testt",
    "_type": "resource",
    "_id": "1234",
    "_version": 1,
    "exists": true,
    "_source": {
        "name": "SSS",
        "bib": {
            "Title": "XSD",
            "IssueDate": "2012-12-19"
        }
    }
}

それでも、クエリリクエストを使用して見つけることができません:

{
    "query": {
        "nested": {
            "path": "bib",
            "query": {
                "query_string": {
                    "query": "XSD"
                }
            }
        }
    }
}

探す:curl -X GET http://localhost:9200/testt/resource/_search?pretty -d '{ "query" : { "nested" : {"path" : "bib", "query" : { "query_string" : {"query" : "XSD"} } } } }'

{
    "took" : 1,
    "timed_out" : false,
    "_shards" : {
        "total" : 5,
        "successful" : 5,
        "failed" : 0
    },
    "hits" : {
        "total" : 0,
        "max_score" : null,
        "hits" : [ ]
    }
}

私の質問は、ネストされたクエリを使用してオブジェクトを見つけるにはどうすればよいですか? bibword を含むネストされたオブジェクトを持つオブジェクトに興味がありますXSD。オブジェクト1234には明らかに が含まれていますXSDが、見つかりません。私のクエリが正しいかどうか教えてもらえますか? どうしたの?

4

2 に答える 2

3

query_stringサポートしていませんが、クエリを自分で解析できる場合は、クエリを使用multi_matchして次のようにすることができます。

{
    "query": {
        "nested": {
            "path": "bib",
            "query": {
                "multi_match": {
                    "query": "XSD",
                    "fields": ["bib.*"]
                }
            }
        }
    }
}

このソリューションで考えられる問題は、ネストされたドキュメントに数値フィールドがある場合、それらをフィールドのリストから除外する必要があることです。これは、フィールド名にプレフィックスを追加することで実現できます。たとえば、すべての文字列フィールドの名前を。で始まるように変更できます。s_この場合、を使用してすべての文字列フィールドを選択できます"fields": ["bib.s_*"]

別の可能な解決策は、親の_allフィールドを使用することです。からすべての親のフィールドを除外し、ネストされたフィールド専用に_all使用できます。_allデフォルトでは、ネストされたすべてのフィールドが親の_allフィールドに含まれます。

于 2012-12-03T15:00:02.223 に答える
2

query_string クエリでデフォルト フィールドを指定する必要があります。

curl -XGET localhost:9200/testt/resource/_search -d '{ 
    "query": {
        "nested" : {
            "path" : "bib",
            "score_mode" : "avg",
            "query" : {
                "query_string" : {
                    "fields" : ["Title"],
                    "query" : "XSD"
                }
            }
        }
    }
}';
于 2012-11-30T15:54:00.227 に答える