【问题标题】:AWS Elastic search : Search should be performed on all combination with given queryAWS 弹性搜索:应该对给定查询的所有组合执行搜索
【发布时间】:2020-04-10 14:25:47
【问题描述】:

我正在研究 AWS 弹性搜索。我在我的项目中遇到过一种情况,在我的报告中我必须搜索诸如“冠状病毒”之类的关键字。

但结果应包含诸如“Corona virus”和“corona”以及“virus”和“coronavirus”之类的关键字。

请指导我如何构建我的查询 DSL。

注意:使用 PHP 语言。

感谢您的帮助。

//阿米特

【问题讨论】:

    标签: amazon-web-services elasticsearch dsl querydsl


    【解决方案1】:

    你需要使用shingle token filter

    构造带状疱疹的类型为 shingle 的令牌过滤器(令牌 n-grams) 来自令牌流。换句话说,它创建了组合 令牌作为单个令牌。例如,句子“请除 这句话变成 shingles" 可能被标记为 shingles "please 分割”、“分割这个”、“这句话”、“句子成”、“成 带状疱疹”。

    映射

    PUT index91
    {
      "settings": {
        "analysis": {
          "analyzer": {
            "my_analyzer": {
              "tokenizer": "standard",
              "filter": [
                "lowercase",
                "shingle_filter"
              ]
            }
          },
          "filter": {
            "shingle_filter": {
              "type": "shingle",
              "min_shingle_size": 2,
              "max_shingle_size": 3,
              "output_unigrams": true,
               "token_separator": ""
            }
          }
        }
      },
      "mappings": {
        "properties": {
          "title": {
            "type": "text",
            "analyzer": "my_analyzer"
          }
        }
      }
    }
    
    

    数据:

    POST index91/_doc
    {
      "title":"corona virus"
    }
    

    查询:

    GET index91/_search
    {
      "query": {
        "match": {
          "title": "coronavirus"
        }
      }
    }
    

    结果:

    "hits" : [
          {
            "_index" : "index91",
            "_type" : "_doc",
            "_id" : "gNmUZHEBrJsHVOidaoU_",
            "_score" : 0.9438393,
            "_source" : {
              "title" : "corona virus"
            }
          }
    

    它也适用于“电晕”、“冠状病毒”、“病毒”

    【讨论】:

    • 感谢您的评论。但我不明白我应该把我的 seasrch 查询作为带状疱疹中的“冠状病毒”放在哪里。你能把这个搜索查询词放在PUT查询DSL下面吗,
    • Shingle 只是一个分析器(索引时)。指定分析器是映射的一部分。对于搜索,您只需要使用匹配查询
    • 如果您按照答案进行操作,您会看到我在创建索引时已将使用带状疱疹的分析器分配给字段。然后使用简单的匹配查询对其进行查询。默认情况下,使用的分析器是“标准”,它根据空间分割文本,这不能用于您的问题,因此需要一种不同的创建标记的方式(所以带状疱疹)
    • 感谢@jaspreet 的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 2014-03-12
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多