我目前正在使用轮胎客户端进行弹性搜索。假设我的弹性搜索映射中有一个字段被索引为long类型的字段。 我正在努力实现这样的目标:
search.query {|query| query.string "30*", :fields => ['id']}
这里'id'是我所谈论的长场。但是因为我在查询中指定了字段,所以通配符不起作用,我最终得到完全匹配作为唯一的结果。
但是同样的事情适用于_all搜索,因为字段类型无关紧要。我希望这种通配符搜索能够工作,同时还在该特定字段中搜索搜索关键字。有没有办法在不改变我的映射的情况下做到这一点?
答案 0 :(得分:2)
我看到下一个解决方案:
使用范围并将其转换为:
(从30到39)或(从300到309)或(从3000到3099) 或(从30000到30999)或......(到最大值)
使用http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-script-filter.html并使用脚本
答案 1 :(得分:2)
感谢@alex关于该脚本提示。最后我发现了一些有用的东西。呼!
所以我最后这样做了(简要地说):
search.query do |query|
query.filtered do |f|
f.filter :script, {
:script => "doc['id'].value.toString() ~= '^30[0-9]*$'"
}
end
end
希望它有所帮助。