elasticsearch - Elastic 中的搜索速度不依赖于分析器的使用
问题描述
我正在尝试在我的项目中使用弹性搜索。创建了索引
curl --location --request PUT 'http://localhost:9200/customers' --header 'Content-Type: application/json' --data-raw '{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 40,
"token_chars": [
"letter",
"digit"
]
}
}
},
"index": {
"max_ngram_diff" : "37"
}
}
}'
添加了20万条记录,我在查询中搜索所有字段
curl --location --request GET 'http://localhost:9200/customers/_search?q=*2000018*' --header 'Content-Type: application/json'
最重要的是,如果我在没有解析器的情况下创建索引,那么速度保持不变,我在第一种情况下使用 ngram,原则上对工作速度感到满意,但决定确保这真的是因为它配置正确,但没有它,情况类似,事实证明它不会以任何方式影响,这意味着我有一些东西 - 我做错了什么
我试图在文档和类似问题中找到答案,但仍然无法弄清楚我做错了什么
我会很高兴得到任何帮助
解决方案
看起来您已经analyzer
在零件中定义了唯一settings
。
您还需要在mappings
零件中定义分析器。
您需要添加analyzer
指向my_analyzer
将在索引时使用的分析器的设置。
参考这个官方 ES 文档,了解更多analyzer
假设您要使用的字段ngram
是title
。下面将是针对这种情况的修改后的索引映射 -
{
"settings": {
"analysis": {
"analyzer": {
"my_analyzer": {
"tokenizer": "my_tokenizer"
}
},
"tokenizer": {
"my_tokenizer": {
"type": "ngram",
"min_gram": 3,
"max_gram": 40,
"token_chars": [
"letter",
"digit"
]
}
}
},
"index": {
"max_ngram_diff": "37"
}
},
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "my_analyzer"
}
}
}
}
推荐阅读
- r - 在 R 中对多个字符串条件使用查找和替换
- cassandra - 从 Apache cassandra 3.11.4 迁移到 4.0 beta 版本时出现问题
- python - 用股票创建数据框
- java - 需要帮助尝试格式化日期时间
- jquery - 联系表格 7 发送一次表格,虽然客户点击了几次
- reactjs - 一旦触发显示,如何扩展 React DatePicker 弹出窗口?
- c# - 干净的代码:如何重构代码以使其更好地删除 switch 语句
- r - 在 R 中读取 .xls 文件
- node.js - 使用 lambda 中的事务更新 dynamoDB 表(递增整数)
- reactjs - 反应:将 map() 的结果推送到数组