1

ネストされたオブジェクトが文字列値のみを持つ場合、ネストされたオブジェクトに対して match_phrase クエリを実行しています。

文字列フレーズの出現を見つけることを意図していました。

仮定しましょう、

1) マッピングは次のとおりです。

"attr": {
                "type": "nested",
                "properties": {
                    "attr": {
                        "type": "multi_field",
                        "fields": {
                            "attr": { "type": "string", "index": "analyzed", "include_in_all": true, "analyzer": "keyword" },
                            "untouched": { "type": "string", "index": "analyzed", "include_in_all": false, "analyzer": "not_analyzed" }
                        }
                    }
                }
            }

2)データは似ています。

オブジェクト A:

"attr": [
    {
        "attr": "beverage"
    },
    {
        "attr": "apple wine"
    }
]

オブジェクト B:

"attr": [
    {
        "attr": "beverage"
    },
    {
        "attr": "apple"
    },
    {
        "attr": "wine"
    }
]

3)したがって、次のようなクエリで

{
    "query": {
        "match": {
            "_all": {
                "query": "apple wine",
                "type": "phrase"
                }
            }
        }
    }

私たちはオブジェクト A だけを期待していますが、残念ながらオブジェクト B も来ています。

ご提案をお待ちしております。

4

2 に答える 2

0

あなたの場合、フレーズの一致を避けるために、個別の配列値のオフセットに大きなギャップが必要です。同じフィールドのインスタンス間にデフォルトの構成可能なギャップがありますが、このギャップのデフォルト値は 0 です。

フィールド マッピングで変更する必要があります。

"attr": { "type": "string", 
"index": "analyzed", 
"include_in_all": true, 
"analyzer": "keyword", 
"position_offset_gap": 100 
}
于 2013-01-02T06:20:05.757 に答える