在项目中,需要通过存储在不同语言环境中的一个字段对记录进行排序。是)我有的: 表“公司”,没有名为“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 gem。
答案 0 :(得分:0)
在Tire中,使用
sort { by "name.name_sort" }
在你的情况下。您的示例中不需要name_
前缀 - 没有它,您可以将您的字段称为name.sort
。
有关详细信息,请参阅https://github.com/karmi/tire/blob/master/test/integration/sort_test.rb和其他集成测试。
答案 1 :(得分:0)
我有一个非常奇怪的弹性动作,但它没有对multi_filed类型进行排序。有一个问题,在应用程序中它可能是英语语言环境中的俄语符号和数据库中俄语语言环境中的英语符号,因此它没有使用multi_filed类型排序...我已成功将multi_filed更改为嵌套以这种方式:
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
这解决了问题......