Elasticsearch引擎查询分析
查询分析是OpenSearch特有的功能,为支持在使用Elasticsearch引擎查询时可通过查询分析功能理解用户的搜索意图,使召回结果更符合用户的需求,OpenSearch针对不同行业,提供如下查询分析能力,供Elasticsearch引擎使用:
行业类型 | 功能 |
---|---|
通用 | 停用词、拼写纠错、词权重、同义词 |
电商 | 停用词、拼写纠错、词权重、同义词、实体识别 |
IT内容 | 停用词、拼写纠错、词权重、同义词 |
教育 | 停用词、拼写纠错、词权重、同义词 |
注:查询分析在不同行业虽提供的功能相同,但内置词典以及分词方式有明显区别,各行业的内置词典以及分词方式贴近对应行业的需求,请根据自身业务需求选择符合行业类型的查询分析。
配置查询分析
1.在开放搜索控制台选择左侧导航栏中的“召回配置”下方对应的“查询分析”:

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

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

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

默认规则如下:
如果应用未设置默认查询分析规则,且query中未指定查询分析,则不进行查询分析;
如果应用未设置默认查询分析规则,但query中指定查询分析,则以query中的查询分析为准;
如果应用已设置默认查询分析规则,且query中未指定查询分析,则以默认查询分析为准;
如果应用已设置默认查询分析规则,但query中指定查询分析,则以query中的查询分析为准;
5.查询分析效果测试:配置查询分析后,可通过效果测试查看其改写结果:


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

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

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

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

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

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"
}
}
}
}
query表示查询词
analyzer表示添加的分析器的名称,详情可参考Elasticsearch搜索增强版自定义插件。
query_processor表示在OpenSearch控制台创建的查询分析名称:
以下是召回结果,查询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"
}
}
]
}
}