필터 대신 검색어에 검색어를 추가 할 때 패싯이 0 개로 표시됩니다. 참고로 나는 루비와 함께 타이어 보석을 사용하고 있습니다. 여기에쿼리에서 Elasticsearch로 패싯 문제 발생
class Property < ActiveRecord::Base
include Tire::Model::Search
include Tire::Model::Callbacks
has_and_belongs_to_many :tags
mapping do
indexes :id, type: 'integer'
indexes :status
indexes :refno, type: 'integer'
indexes :name, :analyzer => 'snowball', :boost => 100
indexes :description
indexes :tags, type: 'object',
properties: {
name: { type: 'multi_field',
fields: {
name: { type: 'string', analyzer: 'snowball' },
exact: { type: 'string', index: 'not_analyzed' }
}
}
}
end
def to_indexed_json
to_json(include: {
tags: { only: [:name] },
})
end
내가 0 패싯을 얻을 검색 방법
def self.search(params={})
tire.search(page: params[:page], per_page: 2, load: true) do
query do
boolean do
must { string params[:name], default_operator: "AND" } if params[:name].present?
must { term :status, 'live' }
must { term :refno, params[:refno]} if params[:refno].present?
# must { term :tag, params[:tag]} if params[:tag].present? ## does not work either
must { term 'tags.name.exact', params[:tag]} if params[:tag].present?
end
end
facet "tags" do
terms 'tags.name.exact'
end
raise to_json
# raise to_curl
end
end
입니다 :
여기의지도 내 모델 코드입니다. 그러나 내가 패싯을 필터로 이동 시키면, 아래의 패싯이 나옵니다.
def self.search(params={})
tire.search(page: params[:page], per_page: 2, load: true) do
query do
boolean do
must { string params[:name], default_operator: "AND" } if params[:name].present?
must { term :status, 'live' }
must { term :refno, params[:refno]} if params[:refno].present?
end
end
filter :term, 'tags.name.exact' => params[:tag] if params[:tag].present?
facet "tags" do
terms 'tags.name.exact'
end
raise to_json
# raise to_curl
end
end
이 확인되는 동안 패싯 필터가 내면 필터에서 비 가능한 태그를 제거하고 새로운면 수를 업데이트 할을 클릭하면이 원하는 아니에요.
작동하는 쿼리에 대해 json이 도움이된다면.
## No Factes
{
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"England",
"default_operator":"AND"
}
},
{
"term":{
"status":"live"
}
},
{
"term":{
"tags.name.exact":[
"Pet Friendly"
]
}
}
]
}
},
"facets":{
"tags":{
"terms":{
"field":"tags.name.exact",
"size":10,
"all_terms":false
}
}
},
"size":2
}
## Facets working
{
"query":{
"bool":{
"must":[
{
"query_string":{
"query":"England",
"default_operator":"AND"
}
},
{
"term":{
"status":"live"
}
}
]
}
},
"facets":{
"tags":{
"terms":{
"field":"tags.name.exact",
"size":10,
"all_terms":false
}
}
},
"filter":{
"term":{
"tags.name.exact":[
"Pet Friendly"
]
}
},
"size":2
}
누군가가 조언을 해줄 수 있기를 바랍니다. 이걸로 내 머리카락을 꺼내기 시작 했어.
단지 패싯이없는 쿼리가 결과를 반환합니까? – imotov
태그에 대한 조건 필터를 주석 처리 한 다음 예를 선택하면 결과가 반환됩니다. 그리고 나는 패싯을 얻는다. 그래서 저에게 패싯 쿼리라는 용어에 오류가 있습니까? – Lee
"검색어 {term 'tags.name.exact', params [: tag]} '를 주석 처리하지 않으면 검색 결과 (패싯이 아님)를 얻으려는 의도였습니다. 패싯은 요청의 쿼리 부분에 의해 제한된 결과를 기반으로 계산됩니다. 따라서 쿼리가 결과를 반환하지 않으면 패싯을 얻지 못합니다. – imotov