| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 大数据 -> Elasticsearch——Text Analysis -> 正文阅读 |
|
[大数据]Elasticsearch——Text Analysis |
文本分析使Elasticsearch能够执行全文搜索,其中搜索返回所有相关结果,而不仅仅是精确匹配。 如果搜索Quick fox jumps,则可能需要包含A quick brown fox jumps over the lazy dog的文档,也可能需要包含相关单词(如fast fox或foxes leap)的文档。 标记化分析通过标记化使全文搜索成为可能:将文本分解为更小的块,称为标记。在大多数情况下,这些标记是单个单词。 如果我们将短语“the quick brown fox jumps”作为单个字符串进行索引,并且用户搜索“quick fox”,则不会将其视为匹配项。但是,如果对短语进行标记并分别为每个单词编制索引,则可以单独查找查询字符串中的术语。这意味着可以通过搜索quick fox、fox brown或其他变体来匹配它们。 规范化标记化允许在单个术语上进行匹配,但每个标记仍然是按字面匹配的。这意味着:
为了解决这些问题,文本分析(text analysis)可以将这些标记规范化为标准格式。这允许我们匹配与搜索词不完全相同但足够相似的标记,以保持相关性。例如:
为了确保搜索词与这些词匹配,可以对查询字符串应用相同的标记化和规范化规则。例如,对Foxes leap的搜索可以规范化为对 自定义文本分析文本分析由分析器执行,分析器是一组控制整个过程的规则。 Elasticsearch包括一个默认的分析器,称为标准分析器(standard analyzer),它可以很好地用于大多数开箱即用的用例。 如果我们想定制我们的搜索体验,我们可以选择不同的内置分析器,甚至可以配置自定义分析器。自定义分析器使我们可以控制分析过程的每个步骤,包括:
文本分析的概念内置分析器将这些构建块预打包为适合不同语言和文本类型的分析器。Elasticsearch还公开了各个构建块,以便可以将它们组合起来定义新的自定义分析器。 Character filters 字符过滤器将原始文本作为字符流接收,并可以通过添加、删除或更改字符来转换流。例如,字符过滤器可用于转换印度教阿拉伯数字(?????????????) 将其转换为阿拉伯语和拉丁语的等价物(0123456789),或从流中删除HTML元素,如<b>。 分析器可以有零个或多个字符过滤器,这些过滤器按顺序应用。 分词器 分词器接收字符流,将其分解为单个标记(通常为单个单词),然后输出一个标记流。例如,whitespace分词器在看到任何空白时都会将文本分解为标记。它将转换文本“Quick brown fox!”进入术语[Quick, brown, fox!]。 分词器还负责记录每个术语的顺序或位置,以及该术语所代表的原始单词的起始和结束字符偏移量。 分析器(analyzer)必须只有一个分词器(tokenizer)。 令牌过滤器(Token filters) 令牌过滤器接收令牌流,并可以添加、移除或更改令牌。例如,小写令牌筛选器将所有令牌转换为小写,停止令牌筛选器从令牌流中删除常见单词(停止词),如,同义词令牌筛选器将同义词引入令牌流。 不允许令牌筛选器更改每个令牌的位置或字符偏移量。 分析器可以有零个或多个令牌过滤器,这些过滤器按顺序应用。 Configure text analysis默认情况下,Elasticsearch使用标准分析器进行所有文本分析。标准分析器为大多数自然语言和用例提供现成的支持。如果选择按原样使用标准分析仪,则无需进一步配置。 如果标准分析器不符合我们的需要,请检查并测试Elasticsearch的其他内置分析器。内置分析器不需要配置,但有些支持选项可用于调整其行为。例如,我们可以使用要删除的自定义停止字列表配置标准分析器。 如果没有适合我们需要的内置分析器,我们可以测试并创建自定义分析器。自定义分析器涉及选择和组合不同的分析器组件,使我们能够更好地控制过程。 analyze API是查看分析器生成的术语的非常宝贵的工具。可以在请求中内联指定内置分析器:
API返回以下响应:
我们还可以测试以下各项的组合:
API返回以下响应:
位置和字符偏移 从analyze API的输出可以看出,分析器不仅将单词转换为术语,还记录每个术语的顺序或相对位置(用于短语查询或单词接近查询),以及原始文本中每个术语的起始和结束字符偏移量(用于突出显示搜索片段)。 或者,在特定索引上运行analyze API时,可以参考自定义分析器:
(1)定义一个名为std_folded的自定义分析器。 (2)字段my_text使用std_folded分析器。 (3)要引用此分析器,分析API必须指定索引名称。 (4)按名称引用分析器。 (5)请参阅字段my_text使用的分析器。 配置内置分析器内置分析器可直接使用,无需任何配置。但是,其中一些支持配置选项以改变其行为。例如,可以将标准分析器配置为支持停止字列表:
创建一个自定义的分析器当内置分析器不能满足我们的需要时,我们可以创建一个自定义分析器,该分析器使用以下各项的适当组合:
(1)对于自定义分析器,请使用自定义类型或忽略类型参数。 上述示例产生以下术语:
上一个示例使用了分词器、标记过滤器和字符过滤器及其默认配置,但是可以创建每个过滤器的配置版本,并在自定义分析器中使用它们。 下面是一个更复杂的示例,它结合了以下内容: 字符过滤器 ????????映射字符筛选器(Mapping Character Filter),配置为被替换 :( with _happy_ and :( with _sad_ 分词器 ? ? ? ? Pattern Tokenizer,配置为按标点字符拆分 令牌过滤器 ????????小写标记过滤器(Lowercase Token Filter) ????????停止标记过滤器(Stop Token Filter),配置为使用预定义的英语停止词列表 以下是一个例子:
(1)为索引指定默认的自定义分析器my_custom_analyzer。此分析器使用在请求后面定义的自定义分词器、字符筛选器和标记筛选器。此分析器还忽略类型参数。 (2)定义自定义 标点符号(punctuation) 分词器。 (3)定义自定义表情字符(emoticons)过滤器。 (4)定义自定义english_stop标记筛选器。 上述示例产生以下术语:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/23 17:09:35- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |