次のような非常に単純なマッピングがあります (例を少し簡素化しました)。
{
"location" : {
"properties": {
"name": { "type": "string", "boost": 2.0, "analyzer": "snowball" },
"description": { "type": "string", "analyzer": "snowball" }
}
}
}
現在、実際の英単語に基づくランダムな値を使用して、多くの場所にインデックスを付けています。
名前または説明フィールドのいずれかで指定されたキーワードのいずれかに一致する場所を検索できるようにしたいと思います(名前はより重要なので、私が与えたブーストです)。いくつかの異なるクエリを試しましたが、結果が返されません。
{
"fields" : ["name", "description"],
"query" : {
"terms" : {
"name" : ["savage"],
"description" : ["savage"]
},
"from" : 0,
"size" : 500
}
}
説明にsavagedという言葉が含まれている場所があることを考えると、いくつかの結果が得られるはずです ( savageはsavagedの語幹です)。上記のクエリを使用すると、0 の結果が得られます。curl を使用して ES をクエリしています。
curl -XGET -d @query.json http://localhost:9200/myindex/locations/_search
代わりにクエリ文字列を使用する場合:
curl -XGET http://localhost:9200/fieldtripfinder/locations/_search?q=description:savage
実際には 1 つの結果が得られます (もちろん、説明フィールドのみを検索することになります)。
基本的に、複数のキーワードを使用して OR のような検索を行い、名前と説明フィールドの両方の値と比較するクエリを探しています。