gpt4 book ai didi

indexing - Elasticsearch Ngram和查询字符串查询

转载 作者:行者123 更新时间:2023-12-02 23:03:13 25 4
gpt4 key购买 nike

我正在使用Elasticsearch 1.2.1。

我正在使用Ngram tokenizer标记文档。我有一个特殊的用例,其中我的字段可能很长(200-500个字符),我想支持冗长(最多200个字符)的“包含”来自该字段任何点的查询。

我从使用最多260个字符的Ngram分析器开始,很快发现索引时间太慢且容量太大,因此我将大小减小到了30个字符。

现在,我希望能够将大于30个字符的 token 分解成较小的 token ,并用损坏的 token 替换用户搜索(知道如果使用更大的Ngram索引,可能会得到比原来更多的结果) 。

实现此功能的推荐方法是什么?请注意,我正在使用查询字符串查询。

最佳答案

尝试使用以下描述的解决方案:Exact Substring Searches in ElasticSearch

{
"mappings": {
"my_type": {
"index_analyzer":"index_ngram",
"search_analyzer":"search_ngram"
}
},
"settings": {
"analysis": {
"filter": {
"ngram_filter": {
"type": "ngram",
"min_gram": 3,
"max_gram": 8
}
},
"analyzer": {
"index_ngram": {
"type": "custom",
"tokenizer": "keyword",
"filter": [ "ngram_filter", "lowercase" ]
},
"search_ngram": {
"type": "custom",
"tokenizer": "keyword",
"filter": "lowercase"
}
}
}
}
}

为了解决磁盘使用问题和搜索词太长的问题,使用了短的8个字符长的ngram(配置为:“max_gram”:8)。要搜索包含8个以上字符的字词,请将搜索结果转换为 bool(boolean) AND查询,以查找该字符串中每个不同的8个字符的子字符串。例如,如果用户搜索了大码(10个字符的字符串),则搜索将是:

“arge ya and arge yar AND rge yard。

关于indexing - Elasticsearch Ngram和查询字符串查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28415763/

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