每个文本搜索解决方案都与其提供的文本分析功能一样强大。 Lucene是这样的开源信息检索库,提供了许多文本分析的可能性。 在本文中,我们将介绍ElasticSearch提供的一些主要文本分析功能,这些功能可用来丰富您的搜索内容。

内容丰富

以一个典型的电子商务站点为例,向最终客户提供正确的搜索内容对于企业非常重要。 任何搜索解决方案提供的文本分析策略在其中都扮演着非常重要的角色。 作为搜索用户,我希望查询能够自动返回一些典型的搜索行为,

  • 应该寻找与我的查询文字相符的同义词
  • 应匹配单词和复数个单词或听起来相似的单词以输入查询文本
  • 不应允许搜索受保护的单词
  • 应该允许搜索包含数字或特殊字符的单词
  • 不应允许搜索html标签
  • 应该允许根据字母的接近度和匹配字母的数量搜索文本

在这里丰富内容将是在为内容建立索引和搜索时,向您的内容添加上述搜索功能。

Lucene文字分析

Lucene是信息检索 (IR),允许全文索引和搜索功能。 为了快速参考,请检查Lucene中的文本分析 。 在Lucene中,文档包含“文本”字段。 分析是将字段文本进一步转换为术语的过程。 这些术语用于匹配搜索查询。 整个分析过程共有三种主要实现,

  • 分析器:分析器负责构建TokenStream,可由索引和搜索过程使用。
  • 标记生成器:一个标记是一个的TokenStream并负责分手传入的文本为标记。 在大多数情况下,分析器将使用令牌生成器作为分析过程的第一步。
  • TokenFilter: TokenFilter也是TokenStream,负责修改由Tokenizer创建的Token。

分析器内部TokenStreams和TokenFilters的常用用法是使用链接模式,该模式可让您从简单的Tokenizer / TokenFilter构建块构建复杂的分析器。 令牌生成器通过将输入的字符划分为令牌来启动分析过程(大多数这些令牌对应于原始文本中的单词)。 然后,TokenFilters接管其余的分析工作,首先包装Tokenizer,然后依次包装嵌套的TokenFilters。

ElasticSearch文本分析

ElasticSearch使用Lucene内置的文本分析功能,可让您丰富搜索内容。 如上所述,文本分析分为过滤器,标记器和分析器。 ElasticSearch为您提供了一些内置的分析器,这些分析器带有预配置的标记生成器和过滤器。 有关现有分析仪的详细列表,请检查分析的完整列表

更新分析设置

ElasticSearch允许您动态更新索引设置和映射。 要从Java api客户端更新索引设置,

Settings settings = settingsBuilder().loadFromSource(jsonBuilder().startObject()//Add analyzer settings.startObject("analysis").startObject("filter").startObject("test_filter_stopwords_en").field("type", "stop").field("stopwords_path", "stopwords/stop_en").endObject().startObject("test_filter_snowball_en").field("type", "snowball").field("language", "English").endObject().startObject("test_filter_worddelimiter_en").field("type", "word_delimiter").field("protected_words_path", "worddelimiters/protectedwords_en").field("type_table_path", "typetable").endObject().startObject("test_filter_synonyms_en").field("type", "synonym").field("synonyms_path", "synonyms/synonyms_en").field("ignore_case", true).field("expand", true).endObject().startObject("test_filter_ngram").field("type", "edgeNGram").field("min_gram", 2).field("max_gram", 30).endObject().endObject().startObject("analyzer").startObject("test_analyzer").field("type", "custom").field("tokenizer", "whitespace").field("filter", new String[]{"lowercase","test_filter_worddelimiter_en","test_filter_stopwords_en","test_filter_synonyms_en","test_filter_snowball_en"}).field("char_filter", "html_strip").endObject().endObject().endObject().endObject().string()).build();CreateIndexRequestBuilder createIndexRequestBuilder = client.admin().indices().prepareCreate(indexName);
createIndexRequestBuilder.setSettings(settings);

您还可以在配置文件中设置索引和设置。 上例中提到的路径是相对于已安装elasticsearch服务器的config目录的。 上面的示例允许您为索引创建自定义过滤器和分析器,ElasticSearch具有不同过滤器和标记器的现有组合,允许您为数据选择正确的组合。

同义字

同义词是具有相同或相似含义的词。 同义词扩展是在这里我们使用单词的变体,并在建立索引和/或查询时将其分配给搜索引擎。 向索引设置添加同义词过滤器。

.startObject("test_filter_synonyms_en").field("type", "synonym").field("synonyms_path", "synonyms/synonyms_en").field("ignore_case", true).field("expand", true)
.endObject()

检查同义词过滤器以获取完整的语法。 您可以添加Slor或WordNet格式的同义词。 查看Slor同义词格式以获取更多示例,

# If expand==true, "ipod, i-pod, i pod" is equivalent to the explicit mapping:
ipod, i-pod, i pod => ipod, i-pod, i pod
# If expand==false, "ipod, i-pod, i pod" is equivalent to the explicit mapping:
ipod, i-pod, i pod => ipod

在单词表中查找符合您要求的单词和同义词列表。

抽干

词干定义为包含词变体的能力。 例如,任何名词词都将包含变体(其重要性与变体的程度成正比)。对于词干,我们使用语法规则的量化方法来添加词干,并根据词干与词根的分离程度对其进行排序字。 将词干过滤器添加到索引的设置。

.startObject("test_filter_snowball_en").field("type", "snowball").field("language", "English")
.endObject()

有关详细信息,请检查Snowball过滤器语法。 阻止程序通常称为阻止算法或阻止程序。 Lucene分析可以基于算法或基于字典。 雪球 ,基于马丁波特的雪球算法提供所产生的功能,并用作在上面的例子中词干。 检查雪球茎杆的列表以获取受支持的不同语言。 同义词和词干有时会根据文本处理的顺序返回奇怪的结果。 确保按照您的要求使用两者。

停用词

停用词是您不希望用户索引或查询的单词列表。 要将停用词过滤器添加到设置中,

.startObject("test_filter_stopwords_en").field("type", "stop").field("stopwords_path", "stopwords/stop_en")
.endObject()

检查停用词filter的完整语法。 检查英语的Snowball 停用词列表以获取您自己的列表。 检查Solr共享的英语停用词列表。

字定界符

单词定界符过滤器使您可以将单词拆分为子单词,以对子单词进行进一步处理。 要将字定界符过滤器添加到设置中,

.startObject("test_filter_worddelimiter_en").field("type", "word_delimiter").field("protected_words_path", "worddelimiters/protectedwords_en").field("type_table_path", "typetable")
.endObject()

常见的单词拆分基于非字母数字性质,大小写转换和单词内定界符等。检查Word Delimiter Filter的完整语法和不同的可用选项。 受保护单词列表使您可以保护业务相关单词免于在过程中被分隔。

N-gram是给定文本序列的n个字母的连续序列。 要将边缘ngram过滤器添加到设置中,

.startObject("test_filter_ngram").field("type", "edgeNGram").field("min_gram", 2).field("max_gram", 30)
.endObject()

根据您的配置,在索引期间,输入文本将分解为上面配置的多个长度的令牌。 它允许您基于匹配的ngram令牌(也基于接近度)返回结果。 检查Edge NGram过滤器的详细语法

HTML Strip字符过滤器

大多数网站都提供应索引HTML内容。 大多数网站都不需要允许对标准html文本进行索引和查询。 ElasticSearch允许您过滤html标记,这些标记不会被索引,也无法查询。

.startObject("analyzer").startObject("test_analyzer").field("type", "custom").field("tokenizer", "whitespace").field("filter", new String[]{"lowercase", "test_filter_worddelimiter_en", "test_filter_stopwords_en", "test_filter_synonyms_en", "test_filter_snowball_en"}).field("char_filter", "html_strip").endObject()
.endObject()

有关详细信息,请检查HTML Strip Char Filter的完整语法。 除了上述常见过滤器外,还有更多可用的过滤器,可让您根据最终用户的要求和业务数据以所需的方式丰富搜索内容。

参考: Elasticsearch:来自Jai的Weblog博客的JCG合作伙伴 Jaibeer Malik的文本分析,以丰富内容 。

翻译自: https://www.javacodegeeks.com/2013/05/elasticsearch-text-analysis-for-content-enrichment.html

Elasticsearch:用于内容丰富的文本分析相关推荐

  1. Python文本分析技巧

    上一章提到,Python是一门易用且强大的编程语言,所以本书将其作为示例语言使用,同时也提供了一套基础的Python文本分析的教程. 为什么要介绍这些Python技巧?原因是希望读者具有Python和 ...

  2. python英文文本分析和提取_python如何提取英语pdf内容并翻译

    本文实例为大家分享了python提取英语pdf内容并翻译的具体代码,供大家参考,具体内容如下 前期准备工作: 翻译接口: 调用的是百度翻译的api(注册后,每个月有2百万的免费翻译字符数.) pdfm ...

  3. ElasticSearch文本分析(一)

    文章目录 ElasticSearch文本分析(一) 概述 分词 归一化 自定义文本分析器 概念 分析器的剖析 字符过滤器 分词器 分词过滤器 索引和查询分析 词干提取 词干提取分词过滤器 算法词干提取 ...

  4. 2019-8-20 [Linux] 6.Shell的基本操作 查看 改变 列出 阅读开头/结尾 循环查看 阅读工具less 查找文件内容 文本分析工具AWK 文本编辑工具SED文件find 帮助man

    文章目录 6.linuxShell的基本操作 6.1 查看目录和文件 6.1.1 显示当前目录:pwd 6.1.2 改变目录:cd 6.1.3 列出目录内容:ls 1) 查看列表信息 以及详细信息 2 ...

  5. Elasticsearch之文本分析过程

    词条(term)查询和全文(fulltext)查询最大的不同之处是:全文查询首先分析(Analyze)查询字符串,使用默认的分析器分解成一系列的分词,term1,term2,termN,然后从索引中搜 ...

  6. Python用于文本分析的一个demo—统计文档中只出现一次的字符

    学习Python也有一周的时间,将学到的内容通过一个文本处理的小程序进行总结,需求如下: 分析文件长度,按单词计数 追踪文件中只出现一次的不同单词 文本采用1863年林肯先生的<葛底斯堡演说&g ...

  7. 【Elasticsearch】文本分析 Text analysis (1)

    Text analysis 是什么 Text analysis 是将分结构化文本转化成结构化文本的过程. 触发时机 当索引或者搜索text类型字段,就会触发文本分析. 工作流程 1.字符过滤器 字符过 ...

  8. 文本挖掘和文本分析与nlp_如何在NLP中保护文本表示的隐私

    文本挖掘和文本分析与nlp 问题概述 (Problem overview) Recently, we have been experiencing numerous breakthroughs in ...

  9. laravel 分词搜索匹配度_SEO除了“中文分词”还有“文本分析”- 搜狗蜘蛛池博客...

    原出处:蜘蛛池博客 原文链接:SEO除了"中文分词"还有"文本分析" - 蜘蛛池博客 对于刚入职的SEO人员,日常工作中,我们很少谈论"中文分词&qu ...

最新文章

  1. 理解 Delphi 的类(六) - 认识类的封装
  2. 什么是鲜为人知但有用的数据结构?
  3. IRIS在win2003中安装 报 error while loading a DLL错误
  4. 【温故知新】CSS学习笔记(链接伪类选择器)
  5. minio安装(包括docker安装)
  6. java 自动装载_springboot自动装载
  7. ZOJ3865:Superbot(BFS) The 15th Zhejiang University Programming Contest
  8. 【ARM】ARM处理器寻址方式
  9. java枚举比较大小写_Spring 3.0 MVC绑定枚举区分大小写
  10. jQ效果:简单的手风琴效果
  11. 怎么注销笔记本icloud_如何在笔记本电脑或台式机的Web浏览器中在线查看Apple iCloud照片
  12. 错误:未启用当前数据库的SQL Server Service Broker,因此查询通知不受支持。如果希望使用通知,请为此数据库启用 Service Broker。...
  13. 仿minecraft游戏 linux,【图片】【Codea制作仿MineCraft3D游戏】Craft Ver. 0.1发布(开源)【codea吧】_百度贴吧...
  14. Oracle 12c PDB数据库的基本操作积累
  15. Ubuntu 16.04 安装opencv3及其扩展模块
  16. 计算机群星闪耀时-记计算机界的大牛们
  17. 程序员转行,干什么比较好
  18. 服务器虚拟资源池,大型医院基于Hyper-V的虚拟化服务器资源池构建
  19. 据说是“缓存之王”? Caffeine高性能设计剖析
  20. GBase 8s灾备集群HAC (三) 主备配置

热门文章

  1. tomcat(8)载入器
  2. Java8 Lambda总结
  3. kafka 发布订阅_在Kafka中发布订阅模型
  4. java 交替_Java 8:使用交替接口公开的类型安全地图生成器
  5. java方法重载和重载方法_Java 8的方法参考进一步限制了重载
  6. finally块_如何从finally块访问方法的结果值
  7. 将Websocket与Spring Framework和Vuejs结合使用
  8. file.getpath_Java中File的getPath(),getCanonicalPath()和getAbsolutePath()之间的区别...
  9. Spring MVC – HTTP消息转换器
  10. 简而言之SPIFFE