Search 弹性搜索:使用通配符搜索整数
我目前正在使用轮胎客户端进行弹性搜索。假设我有一个字段,在弹性搜索映射中作为long类型的字段进行索引。 我正在努力实现这样的目标:Search 弹性搜索:使用通配符搜索整数,search,
elasticsearch,wildcard,tire,Search,
elasticsearch,Wildcard,Tire,我目前正在使用轮胎客户端进行弹性搜索。假设我有一个字段,在弹性搜索映射中作为long类型的字段进行索引。 我正在努力实现这样的目标: search.query {|query| query.string "30*", :fields => ['id']} 这里的“id”是我所说的长字段。但是由于我在查询中指定了字段,所以通配符不起作用,我最终得到的结果是完全匹配的 但是,对_all搜索执行相同的操作,因为字段类型并不重要。我希望这个通配符搜索在搜索特定字段中的搜索键时也能正常工作。有没有
search.query {|query| query.string "30*", :fields => ['id']}
这里的“id”是我所说的长字段。但是由于我在查询中指定了字段,所以通配符不起作用,我最终得到的结果是完全匹配的
但是,对_all搜索执行相同的操作,因为字段类型并不重要。我希望这个通配符搜索在搜索特定字段中的搜索键时也能正常工作。有没有办法在不更改映射的情况下执行此操作?我看到了下一个解决方案:
- 使用multifield并将其设置为字符串类型(但需要更改映射)
- 使用range并将其转换为以下内容: (从30到39)或(从300到309)或(从3000到3099) 或(从30000到30999)或。。。(至最大值)
- 使用脚本并检查这一点
- 使用multifield并将其设置为字符串类型(但需要更改映射)
- 使用range并将其转换为以下内容: (从30到39)或(从300到309)或(从3000到3099) 或(从30000到30999)或。。。(至最大值)
- 使用脚本并检查这一点
- 感谢@alex的脚本技巧。最后我找到了一些有效的方法。呸
因此,我最终(简短地)这样做了:
希望有帮助。感谢@alex的脚本技巧。最后我找到了一些有效的方法。呸 因此,我最终(简短地)这样做了:
希望有帮助。您是否遇到过使用脚本的任何示例?还有,我们可以通过使用正则表达式做些什么吗?哦,我看到你找到了一个解决方案是的,我找到了。谢谢你的提示。我从来没有想过脚本。不使用脚本过滤器有没有可能做到这一点?嘿,伙计们,你们能告诉我他们发布的是哪个版本的
script filter
?你们有没有遇到过使用脚本的例子?还有,我们可以通过使用正则表达式做些什么吗?哦,我看到你找到了一个解决方案是的,我找到了。谢谢你的提示。我从来没有想过脚本。有没有可能不用脚本过滤器来做呢?嘿,伙计们,你们能告诉我他们发布了哪个版本的脚本过滤器吗?
search.query do |query|
query.filtered do |f|
f.filter :script, {
:script => "doc['id'].value.toString() ~= '^30[0-9]*$'"
}
end
end