0

以下のようにelasticsearchクエリを作成し、検索結果にフィルターを適用しようとしています。

"query" : {
        "custom_filters_score" : {
            "query" : {"match" : {"country" : {"query" : "usa","operator" : "and"}}},
            "filters" : [
                {
                    "filter" : {"query" : {"match" : {"state" : {"query" : "statename","operator" : "and"}}} },
                    "boost" : "3"
                },
                {
                    "filter" : {"query" : {"match" : {"city" : {"query" : "cityname","operator" : "and"}}} },
                    "boost" : "3"
                }
            ],
            "score_mode" : "first"
        }
    }

ここではフィルターが機能していません。特定の州と都市のデータをフィルタリングしたり、米国の国のすべての州と都市のデータを返したりすることはありません。

助けてください!

よろしく

4

1 に答える 1

2

カスタムフィルタースコアクエリの機能を誤解していると思います。フィルタはフィルタデータには適用されませんが、それらに一致するドキュメントに特定のスコアを与えるために適用されます。したがって、elasticsearchがそれらすべてのドキュメントを返すのは正常です。それらのスコアは、指定したフィルターに基づいて計算されます。

ドキュメントのみをフィルタリングする場合は、通常のフィルターを使用する必要があります。ElasticsearchクエリDSLは、フィルターにも多くのオプションを提供します(ページの下部を参照してください)。たとえば、boolフィルターを見て、複数のフィルターを組み合わせます。

于 2012-10-29T17:10:15.100 に答える