小白coder丶 2021-04-02 17:03 采纳率: 0%
浏览 30

亿级数据使用solr或es如何实现【精确模糊(不分词),秒级,多字段】查询?

试用过ngram大小为1,速度不理想

或有其他方式实现都可

  • 写回答

1条回答 默认 最新

  • 码农阿豪@新空间 新星创作者: 前端开发技术领域 2024-07-22 23:28
    关注
    让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
    问题:如何优化ngram大小为1的方法以提高执行速度? 回答:有几种方法可以优化ngram大小为1的方法以提高执行速度:
    1. 使用ngram大小为1的快速实现算法:使用哈希算法存储ngram大小为1的结果,以提高查找速度。 案例:
    from collections import defaultdict
    def create_ngram(text, n):
        ngram_dict = defaultdict(int)
        for i in range(len(text) - n + 1):
            ngram = text[i:i+n]
            ngram_dict[ngram] += 1
        return ngram_dict
    text = "hello world"
    ngram_dict = create_ngram(text, 1)
    print(ngram_dict)
    
    1. 优化ngram数据结构:使用字典或集合等数据结构来存储ngram结果,以提高查找速度。 案例:
    from collections import defaultdict
    def create_ngram(text, n):
        ngram_dict = defaultdict(int)
        for i in range(len(text) - n + 1):
            ngram = text[i:i+n]
            ngram_dict[ngram] += 1
        return ngram_dict
    text = "hello world"
    ngram_dict = create_ngram(text, 1)
    print(ngram_dict)
    
    1. 使用并行计算:将ngram计算任务分解为多个子任务,并行计算,以提高执行速度。 案例:
    from concurrent.futures import ThreadPoolExecutor
    def create_ngram(text, n):
        ngram_dict = defaultdict(int)
        for i in range(len(text) - n + 1):
            ngram = text[i:i+n]
            ngram_dict[ngram] += 1
        return ngram_dict
    text = "hello world"
    n = 1
    ngram_dict = defaultdict(int)
    with ThreadPoolExecutor(max_workers=4) as executor:
        for i in range(len(text) - n + 1):
            ngram = text[i:i+n]
            future = executor.submit(create_ngram, ngram, n)
            ngram_dict += future.result()
    print(ngram_dict)
    

    以上是三种优化ngram大小为1的方法以提高执行速度的建议。根据实际情况选择合适的方法来进行优化。

    评论

报告相同问题?