java - 在 Elasticsearch 中使用多个分析器创建和合并索引
问题描述
因此,我在配置 JSON 文件中定义了两个过滤器。现在,我想一次应用这些过滤器,然后组合结果。
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 3,
"max_gram": 20
},
"shingle_filter": {
"type": "shingle",
"min_shingle_size": 1,
"max_shingle_size": 2
}
},
例子:
"best mac laptop" -> "best", "mac", "laptop", "best mac", "mac laptop", "bes", "best", "best ", "best m", "best ma", "best mac", ...
像上面一样,我想使用 Shingle 过滤器创建索引,然后我想在原始数据上创建索引自动完成过滤器,然后在单个文档中组合并创建索引。可能吗?到底有没有?
解决方案
因此,在仔细研究了 spring 数据 Elasticsearch 文档之后,我能够使用两个不同的分析器来索引相同的字段。
@Document(indexName = "course-doc")
@Setting(settingPath = "es-config/autocomplete.json")
@Getter
@Setter
public class Course {
@Id
long id;
@MultiField(
mainField = @Field(type = FieldType.Text, analyzer = "autocomplete_index", searchAnalyzer = "autocomplete_search"),
otherFields = {@InnerField(suffix = "search", type = FieldType.Text, analyzer = "search_index", searchAnalyzer = "autocomplete_search")})
String name;
}
自动完成.json
{
"analysis": {
"filter": {
"autocomplete_filter": {
"type": "edge_ngram",
"min_gram": 2,
"max_gram": 20
},
"shingle_filter": {
"type": "shingle",
"min_shingle_size": 1,
"max_shingle_size": 10
}
},
"analyzer": {
"autocomplete_search": {
"type": "custom",
"tokenizer": "standard",
"filter": [ "lowercase" ]
},
"autocomplete_index": {
"type": "custom",
"tokenizer": "standard",
"filter": [ "lowercase", "stop" , "autocomplete_filter" ]
},
"search_index": {
"type": "custom",
"tokenizer": "standard",
"filter": [ "lowercase" , "shingle_filter" ]
},
"standard-analyzer": {
"type": "custom",
"tokenizer": "standard",
"filter": [ "lowercase", "stop" ]
}
}
}
}
推荐阅读
- python - 获取 Seaborn 联合图的最大密度坐标
- assembly - 具有全局 main 的汇编 x86 - mov 不会更改变量值
- r - 如何在单个 ggplot 上按一个因子绘制多个箱线图?
- entity-framework-core - 在同一个地方设置默认架构和迁移表架构?
- javascript - async await 不同场景的区别
- linux - 无法解析此 elif 子句
- python - 使用 matplotlib.pyplot 和 ListedColormap 绘制虹膜数据集?
- php - 如何处理'在mysql数据库中使用php提交字符串?
- function - Lisp/Scheme/Racket:如何用省略号定义函数
- php - 如何使用 PDO 从 PHP 中的单个 select 语句将孩子分配给父母?