gpt4 book ai didi

elasticsearch - 除非在查询中明确声明,否则Elasticsearch不使用 “default_search”分析器

转载 作者:行者123 更新时间:2023-12-02 22:52:36 25 4
gpt4 key购买 nike

通过阅读Elasticsearch文档,我希望将分析器命名为“default_search”会导致该分析器被用于所有搜索,除非指定了另一个分析器。但是,如果我这样定义索引:

curl -XPUT 'http://localhost:9200/test/' -d '{
"settings": {
"analysis": {
"analyzer": {
"my_ngram_analyzer": {
"tokenizer": "my_ngram_tokenizer",
"filter": [
"lowercase"
],
"type" : "custom"
},
"default_search": {
"tokenizer" : "keyword",
"filter" : [
"lowercase"
]
}
},
"tokenizer": {
"my_ngram_tokenizer": {
"type": "nGram",
"min_gram": "3",
"max_gram": "100",
"token_chars": []
}
}
}
},
"mappings": {
"TestDocument": {
"dynamic_templates": [
{
"metadata_template": {
"match_mapping_type": "string",
"path_match": "*",
"mapping": {
"type": "multi_field",
"fields": {
"ngram": {
"type": "{dynamic_type}",
"index": "analyzed",
"analyzer": "my_ngram_analyzer"
},
"{name}": {
"type": "{dynamic_type}",
"index": "analyzed",
"analyzer": "standard"
}
}
}
}
}
]
}
}
}'

然后添加一个“TestDocument”:
curl -XPUT 'http://localhost:9200/test/TestDocument/1' -d '{
"name" : "TestDocument.pdf" }'

我的查询仍通过默认分析器运行。我知道了,因为此查询给我带来了成功:
curl -XGET 'localhost:9200/test/TestDocument/_search?pretty=true' -d '{
"query": {
"match": {
"name.ngram": {
"query": "abc.pdf"
}
}
}
}'

但是,如果我指定了正确的分析器(使用“关键字”标记符),则不会
curl -XGET 'localhost:9200/test/TestDocument/_search?pretty=true' -d '{
"query": {
"match": {
"name.ngram": {
"query": "abc.pdf",
"analyzer" : "default_search"
}
}
}
}'

除非在查询中另有说明,否则我不希望使用“default_search”进行搜索吗?我只是在误解这里的预期行为吗?

最佳答案

在动态模板中,您正在使用“分析器”来设置搜索和索引分析器。它将仅使用默认值作为最后的手段。

"index_analyzer":"analyzer_name" //sets the index analyzer
"analyzer":"analyzer_name" // sets both search and index
"search_analyzer":"...." // sets the search analyzer.

关于elasticsearch - 除非在查询中明确声明,否则Elasticsearch不使用 “default_search”分析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19234645/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com