-->

弹性搜索:搜索与通配符整数(Elastic search : Searching for integ

2019-11-02 21:46发布

我目前使用的轮胎客户端弹性搜索。 比方说,我有被索引类型在我的弹性搜索映射长的字段的字段。 我想实现这样的事情:

search.query {|query| query.string "30*", :fields => ['id']}

这里“身份证”是关于我在谈论长字段。 但自从我在查询中指定的字段,通配符不工作,我最终得到了精确匹配的唯一结果。

但这样做同样的事情与_all搜索作为字段类型并不重要工作。 我想这个通配符搜索工作,同时也寻求在特定领域的搜索关键字。 有没有办法做到这一点不改变我的映射?

Answer 1:

我看到未来的解决方案:

  • 使用多场,使一个字符串类型的,这也(但需要映射的变化)
  • 使用范围,并翻译成这样的:

    (从30至39)或(300〜309)或(3000〜3099)或(从30000至30999),或者...(至最大值)

  • 使用http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/query-dsl-script-filter.html和检查这个使用脚本



Answer 2:

由于@alex对脚本提示。 最后,我找到了这工作。 唷!

所以最后我做这个(简述):

search.query do |query|
  query.filtered do |f|
      f.filter :script, { 
    :script => "doc['id'].value.toString() ~= '^30[0-9]*$'"
      }
  end
end

希望能帮助到你。



文章来源: Elastic search : Searching for integers with wildcards