不足しているフィルターを含む検索クエリでファセットを使用しようとしていますが、不足しているフィルターで除外されるレコードが考慮されていないようです。
Rails アプリで:
@items = Item.search(per_page: 100, page: params[:page], load: true) do |search|
search.query do |query|
query.boolean do |boolean|
boolean.must { |must| must.string params[:q], default_operator: "AND" }
boolean.must { |must| must.term :project_id, @project.id }
end
query.filtered do
filter :missing , :field => :user_id
end
end
search.facet('tags') do
terms :tag
end
end
リクエストを生成します:
curl -X GET 'http://localhost:9200/items/user_story/item?load=true&size=100&pretty' -d '{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "*",
"default_operator": "AND"
}
},
{
"term": {
"project_id": {
"term": 132
}
}
}
]
},
"filtered": {
"filter": {
"and": [
{
"missing": {
"field": "user_id"
}
}
]
}
}
},
"facets": {
"tags": {
"terms": {
"field": "tag",
"size": 10,
"all_terms": false
}
}
},
"size": 100
}'
nil
ファセットを持っています。
不足しているフィルターを search.filter に移動すると
@items = Item.search(per_page: 100, page: params[:page], load: true) do |search|
search.query do |query|
query.boolean do |boolean|
boolean.must { |must| must.string params[:q], default_operator: "AND" }
boolean.must { |must| must.term :project_id, @project.id }
end
end
search.filter(:missing, :field => 'user_id' )
search.facet('tags') do
terms :tag
end
end
...リクエストを行います:
curl -X GET 'http://localhost:9200/user_stories/user_story/_search?load=true&size=100&pretty' -d '{
"query": {
"bool": {
"must": [
{
"query_string": {
"query": "*",
"default_operator": "AND"
}
},
{
"term": {
"project_id": {
"term": 132
}
}
}
]
}
},
"facets": {
"tags": {
"terms": {
"field": "tag",
"size": 10,
"all_terms": false
}
}
},
"filter": {
"missing": {
"field": "user_id"
}
},
"size": 100
}'
ファセットを取得しますが、フィルタリングされたレコードは考慮されません。
欠落しているフィルターも考慮したファセットを取得できるように、クエリを作成する別の方法はありますか?