弹性搜索中的全局搜索

时间:2017-04-10 11:59:52

标签: search elasticsearch amazon-elasticsearch

使用Elasticsearch,我的用例非常简单。当用户键入搜索框时,我想搜索我的所有数据集,而不管字段或列或任何条件(搜索所有数据并提供文档中所有搜索到的单词)。 这可能在他们的文档中可用,但我无法理解它。有人可以解释一下吗?

2 个答案:

答案 0 :(得分:4)

搜索索引中所有字段的最简单方法是使用_all field

_all字段是一个包含所有字段,它将所有其他字段的值连接成一个大字符串,使用空格作为分隔符,然后对其进行分析和索引,但不进行存储。

例如:

PUT my_index/user/1 
{
  "first_name":    "John",
  "last_name":     "Smith",
  "date_of_birth": "1970-10-24"
}

GET my_index/_search
{
  "query": {
    "match": {
      "_all": "john smith 1970"
    }
  }
}

支持突出显示,因此可以在搜索结果中返回匹配的匹配项。

缺点

这种方法有两个主要缺点:

  1. 存储_all字段
  2. 需要额外的磁盘空间和内存
  3. 您在分析数据和搜索字词方面失去了灵活性
  4. 更好的方法是禁用_all字段,而是列出您感兴趣的字段:

    GET /_search
    {
        "query": {
            "query_string" : {
                "query" : "this AND that OR thus",
                "fields":[
                    "name",
                    "addressline1",
                    "dob",
                    "telephone",
                    "country",
                    "zipcode"
                 ]
            }
        }
    }
    

答案 1 :(得分:0)

Query_string(link)可以为你做这个工作。 它有效支持部分搜索,这是我的分析https://stackoverflow.com/a/43321606/2357869 Query_string比match,term和wildcard查询更强大。

场景1 - 假设你想搜索“你好”: -

然后去: -

{
  "query": {
    "query_string": {"query": "*Hello*" }
  }
}

它将搜索所有单词,如ABCHello,HelloABC,ABCHeloABC

默认情况下,它会在所有字段(_all

中搜索问候语

2)场景2 - 假设你想搜索“你好”或“世界”: -

然后去: -

{
  "query": {
    "query_string": {"query": "*Hello* *World*" }
  }
}

它将搜索所有单词,如ABCHello,HelloABC,ABCHelloABC,ABCWorldABC,ABChello,ABCworldABC等。

它会像Hello OR World一样搜索,所以无论哪个词都有Hello Or world,它都会给出。

默认情况下,query_string(link)使用默认运算符OR,你可以改变它。