[英]elasticsearch sort by score - same field searchable but score different?
[英]Sort on field with different locale with ElasticSearch
在項目中,需要按存儲在不同語言環境中的一個字段對記錄進行排序。 我所擁有的:表“ companies”,沒有名為“ name”的字段,但是有一個表:
create_table "company_localizations" do |t|
t.integer "company_id"
t.string "locale"
t.string "name"
...
end
我有索引company.rb:
mapping do
indexes :name, :type => "multi_field",
:fields => {
:name => {:type => "string", :index => "analyzed"},
:name_sort => {:type => "string", :index => "not_analyzed"}
}
end
我需要在該字段上進行排序。 我正在使用ElasticSearch和Tire寶石。
在輪胎中使用
sort { by "name.name_sort" }
在你的情況下。 您的示例中不需要name_
前綴-沒有它,您可以將字段稱為name.sort
。
有關更多信息,請參見https://github.com/karmi/tire/blob/master/test/integration/sort_test.rb和其他集成測試。
我對Elastic有一個非常奇怪的動作,但是它沒有對multi_filed類型進行排序。 有一個問題,在應用程序中,它可能是數據庫中英語語言環境中的俄語符號和俄語語言環境字段中的英語符號,因此它沒有使用multi_filed類型進行排序...我已經成功地將multi_filed更改為nested以這種方式:
settings :analysis => {
:analyzer => {
:sort_analyzer => {
"tokenizer" => "keyword",
"filter" => ["lowercase"]
}
}
}
mapping do
indexes :name do
indexes :name
indexes :name_sort, :type => "string", :analyzer => "sort_analyzer"
end
...
end
def to_indexed_json
{
...
:name => {
:name => all_localizations(:name).join(" "),
:name_sort => all_localizations(:name).join(" ").mb_chars.strip.to_s
},
...
}
end
解決了問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.