【问题标题】:Global Search in Elastic SearchElastic Search 中的全局搜索
【发布时间】:2017-04-12 00:33:29
【问题描述】:

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

【问题讨论】:

    标签: search elasticsearch amazon-elasticsearch


    【解决方案1】:

    搜索索引中所有字段的最简单方法是使用_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. 您在分析数据和搜索字词方面失去了灵活性

    更好的方法是禁用 _all 字段,而是列出您感兴趣的字段:

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

    【讨论】:

      【解决方案2】:

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

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

      然后继续:-

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

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

      默认情况下,它会在所有字段中搜索 hello (_all)

      2) 场景 2 - 假设你想搜索“Hello”或“World”:-

      然后继续:-

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-08-21
        • 1970-01-01
        • 2021-03-22
        • 1970-01-01
        相关资源
        最近更新 更多