Elasticsearch中什么是倒排索引?

倒排索引(Inverted Index)是一种索引数据结构,它在信息检索系统中被广泛使用,特别是在全文搜索引擎中。倒排索引允许系统快速检索包含给定单词的文档列表。它是文档内容(如文本)与其存储位置之间的映射,通常用于快速检索。

倒排索引的工作原理:

  1. 文档处理:首先,系统会处理每个文档,将其分解为单独的单词或术语。

  2. 构建索引:对于每个单词或术语,倒排索引会记录它出现的所有文档的位置(或位置列表)。这些位置可以是文档的物理地址,也可以是文档ID。

  3. 存储结构:倒排索引通常以键值对的形式存储,其中键是单词或术语,值是包含该单词的文档列表(或文档ID列表)。

倒排索引的组成部分:

  • 词汇表(Term Dictionary):包含所有唯一单词的列表。
  • 文档频率(Document Frequency):每个单词出现的文档数量。
  • 位置列表(Posting List):每个单词对应的文档列表,包括文档ID和单词在文档中的位置信息。

倒排索引的优点:

  • 快速检索:由于倒排索引存储了单词到文档的映射,因此可以快速检索包含特定单词的文档。
  • 节省空间:相比于正向索引(每个文档存储所有单词),倒排索引可以更有效地存储数据,因为它避免了重复存储相同的单词。
  • 支持复杂查询:倒排索引支持布尔查询和其他复杂查询,如短语搜索和模糊搜索。

倒排索引在Elasticsearch中的应用:

在Elasticsearch中,倒排索引是其核心组件之一。Elasticsearch使用倒排索引来实现快速的全文搜索。当文档被索引时,Elasticsearch会创建一个倒排索引,其中包含了文档中所有单词的列表以及这些单词在文档中的位置信息。这使得Elasticsearch能够快速响应搜索请求,找到包含特定单词或短语的文档。

倒排索引是全文搜索引擎中实现高效搜索的关键技术,它通过预先计算和存储单词与文档之间的关系,使得搜索操作能够迅速完成。

倒排索引代码案例

下面是一个简单的Java示例,展示了如何构建一个倒排索引。这个例子中,我们将创建一个简单的倒排索引,用于存储一些文档中的单词及其出现的位置。

倒排索引构建器类(InvertedIndexBuilder.java)

import java.util.*;public class InvertedIndexBuilder {private Map<String, List<DocWord>> invertedIndex = new HashMap<>();public void addDocument(String docId, String[] words) {for (String word : words) {word = word.toLowerCase(); // 转换为小写以实现大小写不敏感的搜索if (!invertedIndex.containsKey(word)) {invertedIndex.put(word, new ArrayList<>());}invertedIndex.get(word).add(new DocWord(docId, words.length)); // 存储文档ID和单词数量}}public Map<String, List<DocWord>> getInvertedIndex() {return invertedIndex;}public static void main(String[] args) {InvertedIndexBuilder builder = new InvertedIndexBuilder();builder.addDocument("1", "The quick brown fox".split(" "));builder.addDocument("2", "The quick brown rabbit".split(" "));builder.addDocument("3", "The fox jumps over the lazy dog".split(" "));System.out.println(builder.getInvertedIndex());}
}class DocWord {String docId;int wordCount;public DocWord(String docId, int wordCount) {this.docId = docId;this.wordCount = wordCount;}@Overridepublic String toString() {return "DocWord{" +"docId='" + docId + '\'' +", wordCount=" + wordCount +'}';}
}

代码解释:

  1. InvertedIndexBuilder类:这个类负责构建倒排索引。

    • invertedIndex:一个HashMap,存储单词到文档列表的映射。
    • addDocument:添加一个文档到索引中。它接受文档ID和单词数组,然后将每个单词与其出现的位置(文档ID和单词数量)关联起来。
    • getInvertedIndex:返回构建的倒排索引。
  2. DocWord类:表示文档中的一个单词。

    • docId:文档ID。
    • wordCount:该文档中的单词数量。
    • toString:重写toString方法以便于打印DocWord对象。
  3. main方法:示例中添加了三个文档到倒排索引构建器中,并打印出构建的倒排索引。

输出示例:


> {the=[DocWord{docId='1', wordCount=4}, DocWord{docId='2',
> wordCount=3}], quick=[DocWord{docId='1', wordCount=4},
> DocWord{docId='2', wordCount=3}], brown=[DocWord{docId='1',
> wordCount=4}, DocWord{docId='2', wordCount=3}],
> fox=[DocWord{docId='1', wordCount=4}, DocWord{docId='3',
> wordCount=7}], jumps=[DocWord{docId='3', wordCount=7}],
> over=[DocWord{docId='3', wordCount=7}], lazy=[DocWord{docId='3',
> wordCount=7}], dog=[DocWord{docId='3', wordCount=7}]}

这个简单的倒排索引示例展示了如何将文档中的单词与其出现的位置关联起来。在实际应用中,倒排索引可能需要包含更多的信息,如单词在文档中的具体位置、词频等,以支持更复杂的搜索操作。

复杂的倒排索引代码案例

创建一个更复杂的倒排索引涉及到处理实际文本数据、分词、去除停用词、记录词频和位置信息等。以下是一个Java实现的示例,它展示了如何构建一个包含这些特性的倒排索引。

倒排索引构建器类(AdvancedInvertedIndexBuilder.java)

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.*;
import java.util.stream.Collectors;public class AdvancedInvertedIndexBuilder {private Map<String, Map<String, List<WordInfo>>> invertedIndex = new HashMap<>();public void buildIndex(String filePath) throws IOException {List<String> lines = Files.readAllLines(Paths.get(filePath));String[] stopWords = {"the", "and", "a", "is", "in", "it"};int docId = 1;for (String line : lines) {String[] words = line.toLowerCase().split("\\W+");Map<String, Integer> wordCounts = new HashMap<>();List<WordInfo> wordInfos = new ArrayList<>();for (String word : words) {if (!Arrays.asList(stopWords).contains(word) && !word.isEmpty()) {wordCounts.put(word, wordCounts.getOrDefault(word, 0) + 1);wordInfos.add(new WordInfo(docId, wordCounts.get(word)));}}String docIdStr = "doc" + docId;invertedIndex.put(docIdStr, new HashMap<>());for (Map.Entry<String, Integer> entry : wordCounts.entrySet()) {String word = entry.getKey();int count = entry.getValue();invertedIndex.get(docIdStr).put(word, wordInfos.stream().filter(info -> info.getDocId() == docId && info.getWordCount() == count).collect(Collectors.toList()));}docId++;}}public Map<String, Map<String, List<WordInfo>>> getInvertedIndex() {return invertedIndex;}public static void main(String[] args) {AdvancedInvertedIndexBuilder builder = new AdvancedInvertedIndexBuilder();try {builder.buildIndex("path/to/your/textfile.txt");System.out.println(builder.getInvertedIndex());} catch (IOException e) {e.printStackTrace();}}
}class WordInfo {private int docId;private int wordCount;private List<Integer> positions;public WordInfo(int docId, int wordCount) {this.docId = docId;this.wordCount = wordCount;this.positions = new ArrayList<>();}public void addPosition(int position) {this.positions.add(position);}public int getDocId() {return docId;}public int getWordCount() {return wordCount;}public List<Integer> getPositions() {return positions;}@Overridepublic String toString() {return "WordInfo{" +"docId=" + docId +", wordCount=" + wordCount +", positions=" + positions +'}';}
}

代码解释:

  1. AdvancedInvertedIndexBuilder类:这个类负责构建一个更复杂的倒排索引。

    • invertedIndex:一个HashMap,存储文档ID到单词到WordInfo列表的映射。
    • buildIndex:从文件中读取文档,对每个文档进行分词,去除停用词,记录词频和位置信息,并构建倒排索引。
    • getInvertedIndex:返回构建的倒排索引。
  2. WordInfo类:表示文档中的一个单词及其相关信息。

    • docId:文档ID。
    • wordCount:该文档中的单词数量。
    • positions:该单词在文档中的位置列表。
    • addPosition:添加单词在文档中的位置。
    • toString:重写toString方法以便于打印WordInfo对象。
  3. main方法:示例中从文件中读取文档,构建倒排索引,并打印出构建的倒排索引。

注意事项:

  • 这个示例假设文本文件中的每行是一个文档。
  • 停用词列表是硬编码的,实际应用中可能需要一个更全面的停用词列表。
  • 分词是通过正则表达式实现的,可能需要根据实际文本内容进行调整。
  • 这个示例没有实现复杂的查询功能,但它提供了倒排索引的基本结构,可以根据需要进行扩展。

这个更复杂的倒排索引示例展示了如何处理实际文本数据、分词、去除停用词、记录词频和位置信息,并构建一个倒排索引。在实际应用中,你可能需要根据具体需求进行调整和扩展。

📚 解释一下倒排索引中的词频和位置信息?

在倒排索引中,词频(Term Frequency)和位置信息(Position Information)是两个重要的概念,它们对于全文搜索引擎的效率和功能至关重要。

词频(Term Frequency)

词频指的是某个单词在特定文档中出现的次数。在倒排索引中,词频可以帮助确定单词在文档中的重要性。通常情况下,一个单词在文档中出现的次数越多,它对文档内容的表示就越重要。词频在以下方面有重要作用:

  1. 相关性评分:搜索引擎使用词频作为评分文档与查询相关性的因素之一。通常,一个单词在文档中出现频率越高,该文档对于包含该单词的查询就越相关。

  2. 文本分析:词频可以用于文本挖掘和分析,比如识别文档的关键主题或概念。

位置信息(Position Information)

位置信息指的是单词在文档中出现的具体位置。这些位置可以是单词在句子中的位置、在段落中的位置或者是单词在文档中的字符偏移量。位置信息在以下方面有重要作用:

  1. 短语匹配:位置信息允许搜索引擎执行短语查询,即搜索引擎可以查找包含特定单词序列的文档。

  2. 邻近性搜索:位置信息可以用于执行邻近性搜索,即查找单词彼此接近的文档,这对于理解文档的上下文非常有用。

  3. 排名和排序:位置信息可以帮助搜索引擎更准确地评估文档的相关性,因为单词的接近程度可能会影响文档的相关性。

结合词频和位置信息

在倒排索引中,通常会将词频和位置信息结合起来,为每个单词建立一个“posting list”(即单词的文档列表)。每个posting list条目不仅包含文档ID和词频,还可能包含单词在文档中的所有位置信息。

例如,对于文档 “The quick brown fox jumps over the lazy dog”,倒排索引可能包含如下信息:

  • 单词 “the”:

    • 文档ID:1
    • 词频:1
    • 位置信息:[1, 2](假设 “the” 在文档中出现了两次,分别在位置1和2)
  • 单词 “quick”:

    • 文档ID:1
    • 词频:1
    • 位置信息:[2]

这种结构允许搜索引擎快速定位到包含特定单词的所有文档,并且能够理解单词在文档中的分布情况,从而提供更准确、更相关的搜索结果。

🔍 如何优化倒排索引以提高搜索效率?

在这里插入图片描述
优化倒排索引以提高搜索效率可以通过以下几种策略实现:

  1. 压缩存储:通过使用压缩技术(如前缀压缩、位图索引)减少索引文件的大小,从而提高索引的查询速度。

  2. 分布式索引:将索引分布在多个服务器上,以处理大规模数据和高并发请求。使用哈希函数将索引均匀分布在不同节点,避免数据倾斜,提高并行处理能力。

  3. 增量构建:为了提高检索效率,可以采用增量构建技术,这意味着倒排索引的构建不是一次性完成,而是随着新文档的加入逐步更新,这样可以有效地减小索引大小,提高查询速度。

  4. 动态阈值设置:通过动态调整索引的阈值,可以控制索引的精细程度,从而在存储空间和查询效率之间取得平衡。

  5. 索引分片:Elasticsearch将每一个索引划分为若干分片,使得查询操作得以并行执行,进一步加快查询速度。

  6. 索引优化技术:Elasticsearch通过索引优化技术,如索引覆盖、索引下推等,进一步提升查询速度。

  7. 预存储结果:Elasticsearch在插入数据时预先处理,将结果预存至索引中,无需再次计算即可快速查询,提高查询效率。

  8. 高效的查询引擎:Elasticsearch拥有高效的查询引擎,支持各类查询,并针对复杂查询提供优化策略,确保查询速度极速。

  9. 异步请求处理:Elasticsearch采用异步请求处理机制,确保请求到达后立即响应,避免长时间等待,提升用户体验。

  10. 列式存储和压缩:Doris中不同列的倒排索引是相互独立的,因此倒排索引文件也采用列式存储,有利于向量化构建索引和提高压缩率。

  11. C++和向量化实现:Apache Doris的存储模块查询执行引擎以及倒排索引都用C++实现,避免了Java Lucene的JVM GC等开销,同样的计算C++实现相对于Java性能优势明显,而且更利于做向量化加速。

  12. 智能索引能力:在建表时利用Doris内置的智能索引能力,除了在建表时利用Doris内置的智能索引能力之外,还可以通过给对应的列增加倒排索引来加速查询。

通过这些策略,可以显著提高倒排索引的搜索效率,尤其是在大规模数据集和高并发场景下。
在这里插入图片描述

但我还没有遇到过,目前业务还没有到如此地步来使我优化,哈哈哈哈

🔍 倒排索引在实时数据处理中的角色是什么?

倒排索引在实时数据处理中扮演着至关重要的角色,主要体现在以下几个方面:

  1. 快速检索:倒排索引允许系统通过关键词快速定位到包含这些关键词的文档,这对于需要实时反馈的搜索系统尤为重要。在实时搜索中,倒排索引能够提供快速的匹配和排序,以保证快速有效地返回排序后的搜索结果。

  2. 实时更新:实时数据处理要求索引的数据能够同步更新。倒排索引支持快速的插入、删除和更新文本,采用增量索引的方式,以增量更新的方式来维护索引,实现文本实时索引的更新。

  3. 数据分片和负载均衡:在处理大规模实时数据时,倒排索引通过支持数据分片和负载均衡,实现对大规模数据进行高效索引和查询操作。

  4. 结果缓存和预取:为了提升搜索结果的响应速度,倒排索引可以采用结果缓存和预取的技术,这样可以减少实时搜索中的延迟。

  5. 全文检索能力:倒排索引是全文搜索的核心技术之一,它通过将每一行文本进行分词,构建词(Term)到行号列表(Posting List)的映射关系,大大减少了搜索时间,提高了检索效率。

  6. 支持复杂查询:倒排索引适合处理布尔查询(如AND、OR、NOT)。通过对不同词项的倒排列表进行交集、并集或差集运算,可以轻松实现复杂的布尔逻辑查询。

  7. 提高查询性能:倒排索引通过将文档中的每个词项映射到包含该词项的所有文档的列表,极大地加速了文本搜索和复杂查询的速度。

  8. 优化数据存储和访问模式:倒排索引文件采用列式存储,有利于向量化构建索引和提高压缩率,从而优化数据存储和访问模式。

综上所述,倒排索引在实时数据处理中的作用是多方面的,它不仅提高了检索速度和查询性能,还支持了数据的实时更新和高效管理,是实现实时搜索和数据处理的关键技术之一。

💡 有没有其他技术可以替代倒排索引用于实时数据处理?

大家看看就行了,平时根本用不到。。。。。。。。。。。。。。。。。。

在实时数据处理中,除了倒排索引,还有其他几种技术可以用于提高搜索效率和数据处理能力:

  1. 向量搜索(Vector Search)

    • 向量搜索技术通过将文本转换为高维向量,并使用这些向量的距离或内积来衡量它们在语义上的关联度或相似度,从而实现基于向量的检索方法。这种技术在自然语言处理和图像识别中得到了广泛应用,尤其是在私域数据上的应用。
  2. 流处理平台(如Apache Kafka和Apache Flink)

    • Apache Kafka是一个分布式流处理平台,能够实时摄取和处理大量数据,常被用作消息队列和流数据源。
    • Apache Flink是一个分布式流处理引擎,能够实时处理大量数据,支持流处理和批处理,以及低延迟处理和复杂事件处理。
  3. 实时数据仓库(如Amazon Kinesis、Google Cloud Dataflow和Microsoft Azure Stream Analytics)

    • 这些平台提供了实时数据摄取和分析的能力,可以与其他云服务集成,提供灵活的数据处理和分析选项。
  4. 多版本控制(MVCC)

    • MVCC是一种解决读写冲突的技术,允许数据的多个版本共存,使得查询可以在一个时间戳的快照上进行,而不被写入操作阻塞。这对于需要实时更新和查询的数据平台尤其重要。
  5. 搜索引擎技术(如Elasticsearch)

    • Elasticsearch是一个分布式搜索引擎,基于Lucene构建,不仅实现了倒排索引,还增加了分布式支持、全文检索和多租户的功能,适合构建日志分析和监控系统。
  6. 数据库内建的全文搜索功能(如RediSearch)

    • RediSearch是Redis的一个模块,提供全文搜索和倒排索引功能,适合在Redis内部实现简单的全文检索,支持实时搜索。
  7. 基于嵌入(Embedding)的检索模式

    • 这种模式通过为每条记录计算出一个高维嵌入向量,并利用这些向量的距离或内积来衡量它们在语义上的关联度或相似度,实现了一种基于向量的检索方法。

这些技术可以单独使用,也可以组合使用,以满足不同的实时数据处理需求。选择合适的技术需要根据具体的业务场景、数据特性和性能要求来决定。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/469764.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python特征工程系列】利用SHAP进行特征重要性分析-XGB模型为例(案例+源码)

这是我的第374篇原创文章。 一、引言 SHAP有多种实现方式&#xff0c;每种方式都适用于特定的模型类型&#xff0c;可以实现更快的逼近。 TreeExplainer :TreeExplainer专为树集合方法开发&#xff0c;如XGBoost&#xff0c;LightGBM或CatBoost。 DeepExplainer :DeepExplain…

C++数据结构算法学习

C ,orient(面向) object , object entity(实体) Visible(可见的) or invisible(不可见) 变量用来保存数据 objects attribute(属性) services(服务) C STL 容器 vector, list&#xff08;&#xff09; vector底层是数组&#xff0c;类似双向链表和list底层 map/s…

ELK-Logstash配置

文章目录 一、什么是Logstash、有什么用&#xff1f;什么是 Logstash&#xff1f;Logstash 的主要特点&#xff1a;Logstash 的用途&#xff1a; 二、Logstash的安装与基本配置事先要安装Java的环境&#xff1f;Logstash 安装Debian/UbuntuRed Hat/CentOSmacOS&#xff08;使用…

R语言机器学习与临床预测模型69--机器学习模型解释利器:SHAP

R小盐准备介绍R语言机器学习与预测模型的学习笔记&#xff0c; 快来收藏关注【科研私家菜】 01 机器学习的可解释性 对于集成学习方法&#xff0c;效果虽好&#xff0c;但一直无法解决可解释性的问题。我们知道一个xgboost或lightgbm模型&#xff0c;是由N棵树组成&#xff0c;…

Vue自定义指令详解——以若依框架中封装指令为例分析

自定义指令 在Vue.js中&#xff0c;自定义指令提供了一种非常灵活的方式来扩展Vue的功能。以下是对Vue中自定义指令的详细解释&#xff1a; 一、自定义指令的基本概念 自定义指令允许开发者直接对DOM元素进行低层次操作&#xff0c;而无需编写大量的模板或者JavaScript代码。…

sql server启用远程连接与修改默认端口

一&#xff0c;数据库右键属性 二&#xff0c;sa账号状态属性启用 三&#xff0c;SQL Server配置管理器, 点击SQL Server 服务选项&#xff0c;确定SQL Server是正在运行的。 四&#xff0c;手动修改数据库的连接端口 1&#xff09;确保启用 2)修改默认端口 3)客户端IP改为一…

吴恩达机器学习笔记(3)

吴恩达机器学习&#xff08;3&#xff09; tensorflow实现 用 TensorFlow 实现神经网络 以下是一个完整的代码示例&#xff0c;展示如何使用 TensorFlow 和 Keras 构建和训练一个简单的神经网络来处理 MNIST 数据集&#xff1a; import tensorflow as tf from tensorflow.k…

【入门篇】A+B Problem——多语言版

AB Problem 跳转 题目分析&#xff1a; 这个题目要求输入两个整数 a 和 b&#xff0c;然后输出它们的和。需要注意的是 a 和 b 的绝对值都不超过 10^9。此外&#xff0c;题目中提到了 Pascal 使用 integer 类型可能会爆掉&#xff0c;说明需要使用更大范围的数据类型来处理这…

Matlab实现鹈鹕优化算法(POA)求解路径规划问题

目录 1.内容介绍 2.部分代码 3.实验结果 4.内容获取 1内容介绍 鹈鹕优化算法&#xff08;POA&#xff09;是一种受自然界鹈鹕捕食行为启发的优化算法。该算法通过模拟鹈鹕群体在寻找食物时的协作行为&#xff0c;如群飞、潜水和捕鱼等&#xff0c;来探索问题的最优解。POA因其…

LED和QLED的区别

文章目录 1. 基础背光技术2. 量子点技术的引入3. 色彩表现4. 亮度和对比度5. 能效6. 寿命7. 价格总结 LED和 QLED都是基于液晶显示&#xff08;LCD&#xff09;技术的电视类型&#xff0c;但它们在显示技术、色彩表现和亮度方面有一些关键区别。以下是两者的详细区别&#xff…

《JavaEE进阶》----20.<基于Spring图书管理系统①(登录+添加图书)>

PS&#xff1a;关于接口定义 接口定义&#xff0c;通常由服务器提供方来定义。 1.路径&#xff1a;自己定义 2.参数&#xff1a;根据需求考虑&#xff0c;我们这个接口功能完成需要哪些信息。 3.返回结果&#xff1a;考虑我们能为对方提供什么。站在对方角度考虑。 我们使用到的…

OpenEuler 下 Docker 安装、配置与测试实例

文章目录 前言1. 环境准备2. 下载 Docker3.配置服务文件4.配置加速器加速下载docker镜像5. 验证 Docker 安装 前言 Docker 安装大致分为包管理器安装、脚本安装、离线手动安装、容器编排工具安装、桌面版安装等&#xff0c;每种安装各有特点&#xff0c;但涉及知识面不少&…

如何线程安全的使用HashMap

前言 Map一直是面试中经常被问到的问题。博主在找工作的过程中&#xff0c;就被问到了这样一个问题&#xff1a; Map是线程安全的吗&#xff1f;我不考虑使用线程安全的Map(eg&#xff1a;ConcurrentHashMap) 。如何在多线程/高并发下安全使用 HashMap&#xff1f; 当时博主…

Android CarrierConfig 参数项和正则匹配逻辑

背景 在编写CarrierConfig的时候经常出现配置不生效的情况&#xff0c;比如运营商支持大范围的imsi&#xff0c;或者是测试人员写卡位数的问题等等&#xff0c;因此就需要模式匹配&#xff08;包含但不限于正则表达式&#xff09;。 基本概念: 模式匹配涉及定义一个“模式”&a…

现代Web开发:Vue 3 组件化开发实战

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 现代Web开发&#xff1a;Vue 3 组件化开发实战 现代Web开发&#xff1a;Vue 3 组件化开发实战 现代Web开发&#xff1a;Vue 3 组…

吾店云介绍 – 中国人的WordPress独立站和商城系统平台

经过多年在WordPress建站领域的摸索和探索&#xff0c;能轻松创建和管理各种类型网站的平台 – 吾店云建站平台诞生了。 应该说这是一个艰苦卓绝的过程&#xff0c;在中国创建一个能轻松创建和使用WordPress网站的平台并不容易&#xff0c;最主要是网络环境和托管软件的限制。…

「QT」几何数据类 之 QLine 整型直线类

✨博客主页何曾参静谧的博客&#x1f4cc;文章专栏「QT」QT5程序设计&#x1f4da;全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasolid…

游戏引擎学习第五天

这节貌似没讲什么 视频参考:https://www.bilibili.com/video/BV1Gmm2Y5EwE/ uint8 *A somewhere in memory; uint8 *B somewhere in memory;//BEFORE WE GOT TO HERE int Y *B; // whatever was actually there before the 5 *A 5; int X *B; // 5 //Obviously! Y and …

uniapp分享功能

页面生命周期 https://uniapp.dcloud.net.cn/tutorial/page.html#lifecycle onShareTimeline 监听用户点击右上角转发到朋友圈 微信小程序 2.8.1 onAddToFavorites 监听用户点击右上角收藏 微信小程序、QQ小程序 2.8.1 onShareAppMessage 用户点击右上角分享 微信小程序、QQ小程…

小程序中引入下载到本地的iconfont字体图标加载不出来问题解决

我这个是uniapp项目,字体图标都是一样的,在vue项目中web端、uniapp运行到h5都没问题,但是运行到小程序加载不出来,报错如下: 不让用本地路径,所以我们要转为base64编码,这里给大家提供一个工具,它可以把本地字体文件转为base64:transfonter 进入官网后,第一步: …