php - Elasticsearch 7.2 使用映射和自定义分析器 php 创建索引
问题描述
我正在尝试覆盖弹性搜索分析器,以便为我正在处理的自动完成返回完全匹配的电子邮件。我目前正在使用 PHP 库进行弹性搜索,但大多数问题都在 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"
}
}
}
推荐阅读
- javascript - 迭代每个单元格 javascript / Jquery 的表更新货币
- c# - 如何创建显示数组中每个精灵的函数,在两者之间暂停?
- sql-server - 从报告数据库中提取 SSRS RDL 文件
- powershell - 表达式或语句 PowerShell 中出现意外的标记“}”
- javascript - 带角度的动态 iframe 源
- c++ - 使用递归计算特定数字并用 0 替换偶数数字
- javascript - 更改/交换 Highcharts 数据
- azure - Azure 文件存储 - 恢复到以前的快照
- java - 如何在 post 方法中将数据从 android 应用程序发送到服务器?
- tfs - TFS 2015 - 如何跨项目跟踪活动