我试图覆盖 flex 搜索分析器,以便为我正在处理的自动完成功能返回完全匹配的电子邮件。我目前正在使用PHP库进行 flex 搜索,但是大多数问题都在JSON中,因为对我而言,直接使用JSON而不是嵌套的PHP数组更容易。
我已经找到了一些假定的旧版本的旧示例,但是在7.2版中同时使用映射和自定义分析器创建索引并没有运气
$queryStr= <<<'EOD'
{
"index":"my_db",
"body":{
"settings":{
"analysis":{
"analyzer":{
"my_email_analyzer":{
"type":"custom",
"tokenizer":"uax_url_email",
"filter":[
"lowercase",
"stop"
]
}
}
}
},
"mapping":{
"properties":{
"ak_first_name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"ak_last_name":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"uID":{
"type":"text",
"fields":{
"keyword":{
"type":"keyword",
"ignore_above":256
}
}
},
"email":{
"type":"text",
"fields":{
"keyword":{
"type":"string",
"analyzer":"my_email_analyzer"
}
}
}
}
}
}
}
EOD;
$this->client->indices()->create($queryStr);
最佳答案
JSON中有两个小错别字:
mapping
应该阅读mappings
string
应该阅读text
开始:
$queryStr= <<<'EOD'
{
"index":"my_db",
"body":{
"settings":{
"analysis":{
"analyzer":{
"my_email_analyzer":{
"type":"custom",
"tokenizer":"uax_url_email",
"filter":[
"lowercase",
"stop"
]
}
}
}
},
"mappings":{ <--- here
"properties":{
...
"email":{
"type":"text",
"fields":{
"keyword":{
"type":"text", <---- here
"analyzer":"my_email_analyzer"
}
}
}
关于php - Elasticsearch 7.2使用映射和自定义分析器PHP创建索引,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56763497/