[英]How to create a Elasticsearch node specifying default search analyzers for indexing and searching
[英]Create and merge indexes using multiple analyzers in 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过滤器创建索引,然后我想在原始数据上创建索引自动完成过滤器,然后在单个文档中组合和创建索引。 是否可以? 有吗?
因此,在仔细查看弹簧数据 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" ]
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.