栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在not_analyzed字段上进行Elasticsearch通配符搜索

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在not_analyzed字段上进行Elasticsearch通配符搜索

我的解决方案历险记

如您在我的问题中所见,我已经开始审理案件。每当我更改了一部分设置后,一部分便开始工作,而另一部分则停止工作。让我给出我的解决方案历史记录:

1.) 我已将数据索引为默认值。这意味着,我的数据是

analyzed
默认的。这将在我这方面引起问题。例如;

当用户开始搜索诸如 SVF-1 的关键字时,系统将运行以下查询:

{    "query": {        "filtered" : { "query" : {     "query_string" : {         "analyze_wildcard": true,         "query": "*SVF-1*"     } }        }    }}

和结果;

SVF-123SVF-234

这是正常现象,因为

name
我的文档字段是
analyzed
。这将查询分为记号
SVF
1
,并
SVF
与我的文档匹配,尽管
1
不匹配。我已经跳过了。我为我的字段创建了一个映射
not_analyzed

{  "mappings":{     "product":{        "properties":{"name":{   "type":"string",   "index": "not_analyzed"},"site":{   "type":"string",   "index": "not_analyzed"}         }     }  }}

但我的问题仍然存在。

2.)
经过大量研究,我想尝试另一种方法。决定使用通配符查询。我的查询是

{    "query": {        "wildcard" : { "name" : {     "value" : *SVF-1*"  }          }      }, "filter":{         "term": {"site":"pro_en_GB"} }    }}

该查询有效,但是这里有一个问题。我的字段不再进行分析,我正在进行通配符查询。区分大小写是这里的问题。如果我像 svf-1
一样搜索,它什么也不会返回。因为,用户可以输入小写版本的查询。

3.) 我将文档结构更改为;

{  "mappings":{     "product":{        "properties":{"name":{   "type":"string",   "index": "not_analyzed"},"nameLowerCase":{   "type":"string",   "index": "not_analyzed"}"site":{   "type":"string",   "index": "not_analyzed"}         }     }  }}

我还增加了一个

name
名为的字段
nameLowerCase
。索引文档时,我将文档设置为:

{    name: "SVF-123",    nameLowerCase: "svf-123",    site: "pro_en_GB"}

在这里,我将查询关键字转换为小写并在新

nameLowerCase
索引上进行搜索操作。并显示
name
字段。

我查询的最终版本是;

{    "query": {        "wildcard" : { "nameLowerCase" : {     "value" : "*svf-1*"  }          }      }, "filter":{         "term": {"site":"pro_en_GB"} }    }}

现在可以了。还有一种使用multi_field解决此问题的方法。我的查询包含破折号(-),并且遇到了一些问题。

非常感谢@Alex Brasetvik的详细解释和努力



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/412985.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号