ElasticSearch:如何在一个或多个索引中的所有类型的任何字段中搜索值?

时间:2015-12-08 03:28:47

标签: elasticsearch match

我有两个索引my_index_1my_index_2。在这些索引中,我有以下文档类型:

my_index_1

  • 组织
  • 角色
  • 技能

my_index_2

  • 产品
  • 服务
  • 专利
  • 商标
  • 服务标记

每种类型都有不同的字段。

我的问题: 在任何一个甚至两个索引的任何类型的任何字段中查询字符串“abc”的最佳方法是什么?

我在文档中没有看到任何便于进行此类搜索的内容。是否有类似的东西:

$ curl -XPOST 'localhost:9200/_search?pretty' -d '
{
  "query": { "match": { *: "abc" } }
}'

提前感谢您提供的任何帮助。

4 个答案:

答案 0 :(得分:8)

query_string querymatch query将是您正在寻找的内容。

如果default_field中未指定任何内容,则{p> curl -XPOST 'localhost:9200/_search?pretty' -d '{ "query": { "query_string": { "query": "abc" } } }' 将使用特殊_all field,这样效果会很好。

match

使用_all,您也可以指定curl -XPOST 'localhost:9200/_search?pretty' -d '{ "query": { "match": { "_all": "abc" } } }'

query_string

请注意,使用match时,您可以使用通配符,您可以使用import jsmash.Tools;

答案 1 :(得分:2)

我认为您可以将_all用于此目的

试试这个

$ curl -XPOST 'localhost:9200/_search?pretty' -d '
{
  "query": { "match": { "_all": "abc" } }
}'

您也可以使用query_string,因为它默认搜索_all

答案 2 :(得分:2)

_all

是现已弃用的multi match query字段的替代方法
GET /_search
{
  "query": {
    "multi_match" : {
      "query":    "Will Smith",
      "fields": [ "important_field^5", "less_important^2", "title", "*_name" ] 
    }
  }
}

支持字段名称中的通配符,并使用^#语法提高字段的重要性

从7.3版开始: 如果未提供任何字段,则multi_match查询默认为index.query.default_field索引设置,而默认设置为*。 *提取映射中符合词条查询条件的所有字段,并过滤元数据字段。然后将所有提取的字段组合起来以构建查询。

另一种选择是Query string query

GET /_search
{
    "query": {
        "query_string" : {
            "query" : "(new york city) OR (big apple)",
            "default_field" : "content"
        }
    }
}

default_field (可选,字符串)如果查询字符串中未提供任何字段,则为您要搜索的默认字段。

默认为index.query.default_field索引设置,其默认值为*。

答案 3 :(得分:0)

试试这个以获得所有索引和所有字段的结果:

GET _all/_search
{
"query" : {
   "multi_match": {
      "query": "abc",
      "fields": []
       }
    }
 }