阿里云首页 开放搜索

Elasticsearch引擎查询分析

查询分析是OpenSearch特有的功能,为支持在使用Elasticsearch引擎查询时可通过查询分析功能理解用户的搜索意图,使召回结果更符合用户的需求,OpenSearch针对不同行业,提供如下查询分析能力,供Elasticsearch引擎使用:

行业类型

功能

通用

停用词、拼写纠错、词权重、同义词

电商

停用词、拼写纠错、词权重、同义词、实体识别

IT内容

停用词、拼写纠错、词权重、同义词

教育

停用词、拼写纠错、词权重、同义词

:查询分析在不同行业虽提供的功能相同,但内置词典以及分词方式有明显区别,各行业的内置词典以及分词方式贴近对应行业的需求,请根据自身业务需求选择符合行业类型的查询分析。

配置查询分析

1.在开放搜索控制台选择左侧导航栏中的“召回配置”下方对应的“查询分析”

2.选择“Elasticsearch引擎”,并选择对应的应用,点击“创建”:

3.输入“规则名称”,选择行业,选择功能,点击“确定”:

4.设置为默认(可选):表示如果在query中未指定查询分析,则进行默认的查询分析逻辑:

默认规则如下:

  • 如果应用未设置默认查询分析规则,且query中未指定查询分析,则不进行查询分析;

  • 如果应用未设置默认查询分析规则,但query中指定查询分析,则以query中的查询分析为准;

  • 如果应用已设置默认查询分析规则,且query中未指定查询分析,则以默认查询分析为准;

  • 如果应用已设置默认查询分析规则,但query中指定查询分析,则以query中的查询分析为准;

5.查询分析效果测试:配置查询分析后,可通过效果测试查看其改写结果:

1)查询分析列表页,找到刚创建的查询分析,点击“效果测试”:
2)输入查询词,查看效果:
4

配置查询分析干预词典

当内置的查询分析词典无法满足用户需求时,也可以通过添加自定义干预词典来达到用户预期,这里以拼写纠错为例:用户搜索Query“福健”,返回的结果不多,但是都完整包含了“福建”关键词,此时可以通过新建拼写纠错干预词典,在Query“福健”下干预添加纠正词“福建”,再将该拼写纠错词典应用在线上使用的查询分析规则中解决这个case。

1.控制台—->搜索算法中心—->召回配置—->词典管理,创建拼写纠错词典:

2.填写“名称”,词典类型选择“拼写纠错”:

3.在新建的拼写纠错干预词典里新增干预词条,Query栏填写“福健”,纠正词栏填写“福建”,干预类型选择“添加”:

4.在查询分析界面把刚刚创建的“拼写纠错干预词典”先应用在一个未上线的查询分析规则中,以便进行搜索效果测试:

5.效果测试是否符合预期效果。发现搜索结果召回了改写成“福建”的结果,符合预期:

001

Elasticsearch引擎查询分析测试

1.在Elasticsearch控制台实例详情页中确认OpenSearch的“Elasticsearch搜索增强版自定义插件”是否已经安装:

2.登录Elasticsearch可视化控制台通过Dev Tools工具测试已安装的插件:

3.在输入框中执行如下命令创建索引:

PUT /test_os_analyzer
{
  "mappings": {
    "properties": {
        "content": {
            "type": "text",
            "analyzer": "chn_ecommerce_general"
          }
      }
  }
}

以上示例创建了一个名称为test_os_analyzer的索引,类型为_doc。包含了一个content属性,类型为text,并添加了chn_ecommerce_general分析器。

4.执行如下命令,添加2条文档:

POST /test_os_analyzer/_doc/1
{
  "content": "aj"
}

POST /test_os_analyzer/_doc/2
{
  "content": "adidas"
}

以上示例创建了名称为1、2的文档,并设置了文档中的content字段的内容为aj”和“adidas

5.在OpenSearch控制台,搜索算法中心-->召回配置-->词典管理中添加一个同义词干预词典:

添加词条,配置aj的同义词为adidas”:

6.创建一个新的查询分析,并配置上刚刚创建的同义词干预词典,步骤可参考“配置查询分析干预词典”

7.回到Elasticsearch的Dev Tools工具中,对查询分析进行验证:

GET /test_os_analyzer/_doc/_search
{
    "query": {
      "match_opensearch": {
        "content": {
          "query":"aj",
          "analyzer": "chn_ecommerce_general",
          "query_processor":"test_es_qp_2"
        }
      }
    }
}

以下是召回结果,查询aj同时召回了aj”和“adidas的文档

{
  "took" : 4,
  "timed_out" : false,
  "_shards" : {
    "total" : 1,
    "successful" : 1,
    "skipped" : 0,
    "failed" : 0
  },
  "hits" : {
    "total" : {
      "value" : 2,
      "relation" : "eq"
    },
    "max_score" : 2.1851041,
    "hits" : [
      {
        "_index" : "test_os_analyzer",
        "_type" : "_doc",
        "_id" : "4",
        "_score" : 2.1851041,
        "_source" : {
          "content" : "aj"
        }
      },
      {
        "_index" : "test_os_analyzer",
        "_type" : "_doc",
        "_id" : "5",
        "_score" : 2.1851041,
        "_source" : {
          "content" : "adidas"
        }
      }
    ]
  }
}

注意事项

  • 干预词典一共可以创建20个;

  • 干预词典中干预词条最多添加1000个;

  • 添加的干预内容均会进行大小写和全半角归一化处理,其中大写字母会归一化为小写,全角会归一化为半角;

  • 各类型干预词典的具体限制可以参考其相应HA3引擎的注意事项功能限制停用词拼写纠错词权重同义词实体识别】。