我正致力于实施自动填充字段,其中建议还包含匹配文档的数量。
我已经使用include
过滤器的术语聚合实现了这一点。因此,例如,如果用户输入克莱斯勒'可能会生成以下查询:
{
"size": 0,
"query": {
"bool": {
"must": [
...
]
}
},
"aggs": {
"filtered": {
"filter": {
...
},
"aggs": {
"suggestions": {
"terms": {
"field": "prefLabel",
"include": "Chry.*",
"min_doc_count": 0
}
}
}
}
}
}
这很好,我能够获得我需要的数据。但是,我担心这不是很好地优化,并且在索引文档时可以做更多的事情。
目前我们有以下映射:
{
...
"prefLabel":{
"type":"string",
"index":"not_analyzed"
}
}
我想知道是否添加分析字段,如下:
{
...
"prefLabel":{
"type":"string",
"index":"not_analyzed",
"copy_to":"searchLabel"
},
"searchLabel":{
"type":"string",
"analyzer":"???"
}
}
所以我的问题是:什么是最优的索引时间分析器呢? (或者,这只是疯了吗?)
答案 0 :(得分:0)
我认为edge ngram tokenizer可以加快速度:
curl -XPUT 'localhost:9200/test_ngram' -d '{
"settings" : {
"analysis" : {
"analyzer" : {
"suggester_analyzer" : {
"tokenizer" : "ngram_tokenizer"
}
},
"tokenizer" : {
"ngram_tokenizer" : {
"type" : "edgeNGram",
"min_gram" : "2",
"max_gram" : "7",
"token_chars": [ "letter", "digit" ]
}
}
}
},
"mappings": {
...
"searchLabel": {
"type": "string",
"index_analyzer": "suggster_analyzer",
"search_analyzer": "standard"
}
...
}
}'