如何在ElasticSearch 6.2中搜索所有字段?

时间:2018-04-16 17:16:07

标签: elasticsearch

我发送请求:

POST http://localhost:9200/mydatabase/users/_search

身体:

{
    "query": {
        "fuzzy" : {
            "role" : {
                "value": "admn",
                "boost": 1.0,
                "fuzziness": 1,
                "prefix_length": 0,
                "max_expansions": 100
            }
        }
    }
}

我得到了这个回应:

 "hits": [
            {
                "_index": "mydatabase",
                "_type": "users",
                "_id": "mKstz2IBuOClWUbC0-1v",
                "_score": 0.5198604,
                "_source": {
                    "user": "Сорокин Роман",
                    "description": "Данному пользователю предоствлена админка",
                    "role": "Admin"
                }
            }
        ]

如果我想通过所有字段进行搜索,如何编写查询,而不仅仅是字段“role”并使用模糊?

Сan我在没有配置映射的情况下编写查询?

1 个答案:

答案 0 :(得分:0)

因为你提到"没有配置映射" - 我假设您已经考虑过_all field(需要更改映射)。

选项包括:

1 - 使用"Query String" query而不使用default_field并使用Lucene Query syntax进行模糊匹配;如文档中所述 - 默认情况下,它组合所有字段以生成查询。

GET /_search
{
    "query": {
        "query_string" : {
           query" : "admn~"
        }
    }
}

您还可以定位特定字段(包括通配符)。

 GET /_search
    {
        "query": {
            "query_string" : {
               "fields": "role*" 
               "query" : "admn~"
            }
        }
    }

2-使用bool query和should子句组合多个字段。

POST _search
{
  "query": {
    "bool": {
      "should": [
        {
          "fuzzy": {
            "role": {
              "value": "admn",
              "boost": 1,
              "fuzziness": 1,
              "prefix_length": 0,
              "max_expansions": 100
            }
          }
        },
        {
          "fuzzy": {
            "role2": {
              "value": "admn",
              "boost": 1,
              "fuzziness": 1,
              "prefix_length": 0,
              "max_expansions": 100
            }
          }
        }
      ]
    }
  }
}