Wenn ich einen Begriff zu meiner Abfrage anstelle eines Filters hinzufügen, bekomme ich 0 Facetten. FYI Ich benutze den Reifen Juwel mit Ruby.Facet Probleme mit Elasticsearch auf Abfrage
Hier ist mein Modell-Code mit Mapping:
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
Dann ist hier die Suchmethode
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
I 0 Facets bekommen. Aber wenn ich Facetten zu einem Filter verschiebe, dh unten bekomme ich volle Facetten.
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
Während dies in Ordnung ist es nicht wollen, wenn eine Facette Filter klickte ich nicht verfügbaren Tags aus meiner Facette Filter und aktualisieren Sie die neue Facette Zahl entfernen möchten.
Wenn es hier hilft, ist der JSON für die Abfrage, die funktioniert und nicht.
## 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
}
Wirklich hoffe jemand kann beraten. Ich fing an, mir die Haare auszuziehen.
Nur um sicherzustellen, gibt die Abfrage ohne Facetten keine Ergebnisse zurück? – imotov
Wenn ich die Begriffe Filter für Tags auskommentiere, dann werden Ergebnisse zurückgegeben. Und ich bekomme Facetten. Also ist es ein Fehler mit dem Begriff Facettenabfrage? – Lee
Ich meinte, Sie erhalten jedes Suchergebnis (nicht Facetten), wenn Sie nicht auskommentieren müssen "must {term 'tags.name.exact', params [: tag]}". Facetten werden basierend auf den Ergebnissen berechnet, die durch den Abfrageteil der Anfrage begrenzt sind. Wenn also die Abfrage keine Ergebnisse liefert, erhalten Sie keine Facetten. – imotov