Database elasticsearch如何使用精确搜索并忽略关键字中的特殊字符?
我的elasticsearch索引中有一些id值(数字和文本组合),在我的程序中,用户可能会在搜索关键字中输入一些特殊字符。 我想知道是否有任何方法可以让elasticsearch使用精确搜索,也可以删除搜索关键字中的一些特殊字符 我已经使用自定义分析器将搜索关键字拆分为一些特殊字符。然后用query->match搜索数据,结果还是没有Database elasticsearch如何使用精确搜索并忽略关键字中的特殊字符?,database,
elasticsearch,search,Database,
elasticsearch,Search,我的elasticsearch索引中有一些id值(数字和文本组合),在我的程序中,用户可能会在搜索关键字中输入一些特殊字符。 我想知道是否有任何方法可以让elasticsearch使用精确搜索,也可以删除搜索关键字中的一些特殊字符 我已经使用自定义分析器将搜索关键字拆分为一些特殊字符。然后用query->match搜索数据,结果还是没有 资料 { “_索引”:“测试数据”, “\u类型”:“\u单据”, “_id”:“11112222”, “_来源”:{ “testid”:“1MK444750”
{
“_索引”:“测试数据”,
“\u类型”:“\u单据”,
“_id”:“11112222”,
“_来源”:{
“testid”:“1MK444750”
}
}
“分析”:{
“分析器”:{
“测试分析仪”:{
“模式”:“([^\w\d]+||”,
“类型”:“模式”
}
}
}
{
“第条”:{
“映射”:{
“_doc”:{
“财产”:{
“睾丸”:{
“类型”:“文本”,
“分析仪”:“测试分析仪”
}
}
}
}
}
}
这是我的elasticsearch查询
GET/testdata/\u搜索
{
“查询”:{
“匹配”:{
//“测试”:“1MK_444-750”//无结果
“testid”:“1MK444750”
}
}
}
analyzer成功地分离了我的关键字,但我无法匹配结果中的任何内容
POST/testdata/\u分析
{
“分析仪”:“测试分析仪”,
“文本”:“1MK_444-750”
}
{
“代币”:[
{
“令牌”:“1mk”,
“起始偏移量”:0,
“端部偏移”:3,
“类型”:“单词”,
“位置”:0
},
{
“令牌”:“444”,
“起始偏移量”:4,
“端部偏移”:7,
“类型”:“单词”,
“职位”:1
},
{
“令牌”:“750”,
“起始偏移量”:8,
“端部偏移”:11,
“类型”:“单词”,
“职位”:2
}
]
}
请帮忙,提前谢谢 首先,您可能应该将
testid
字段建模为关键字
,而不是文本
,它是更合适的数据类型
您希望加入一个功能,在搜索时可以有效地忽略某些字符(
,-
)。您可以通过为字段提供一个规范化器来实现这一点,该规范化器告诉Elasticsearch如何在索引或搜索之前预处理该字段的数据。具体来说,您可以在规范化程序中声明一个,用空字符串替换这些字符
以下是所有这些更改如何适应您的映射:
PUT /testdata
{
"settings": {
"analysis": {
"char_filter": {
"mycharfilter": {
"type": "mapping",
"mappings": [
"_ => ",
"- => "
]
}
},
"normalizer": {
"mynormalizer": {
"type": "custom",
"char_filter": [
"mycharfilter"
]
}
}
}
},
"mappings": {
"_doc": {
"properties": {
"testid" : {
"type" : "keyword",
"normalizer" : "mynormalizer"
}
}
}
}
}
然后,以下搜索将产生相同的结果:
GET /testdata/_search
{
"query": {
"match": {
"testid": "1MK444750"
}
}
}
GET /testdata/_search
{
"query": {
"match": {
"testid": "1MK_444-750"
}
}
}