十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
本文小编为大家详细介绍“基于ElasticSearch Analyzer的使用规则是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“基于ElasticSearch Analyzer的使用规则是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
为白云等地区用户提供了全套网页设计制作服务,及白云网站建设行业解决方案。主营业务为网站制作、成都网站建设、白云网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!查询只能查找倒排索引表中真实存在的项, 所以保证文档在索引时与查询字符串在搜索时应用相同的分析过程非常重要,这样查询的项才能够匹配倒排索引中的项。
尽管是在说 文档 ,不过分析器可以由每个字段决定。 每个字段都可以有不同的分析器,既可以通过配置为字段指定分析器,也可以使用更高层的类型(type)、索引(index)或节点(node)的默认配置。在索引时,一个字段值是根据配置或默认分析器分析的。
例如为 my_index 新增一个字段:
PUT /my_index/_mapping/my_type { "my_type": { "properties": { "english_title": { "type": "string", "analyzer": "english" } } } }
现在我们就可以通过使用 analyze API 来分析单词 Foxes ,进而比较 english_title 字段和 title 字段在索引时的分析结果:
GET /my_index/_analyze { "field": "my_type.title", "text": "Foxes" } GET /my_index/_analyze { "field": "my_type.english_title", "text": "Foxes" }
字段 title ,使用默认的 standard 标准分析器,返回词项 foxes 。
字段 english_title ,使用 english 英语分析器,返回词项 fox 。
这意味着,如果使用底层 term 查询精确项 fox 时, english_title 字段会匹配但 title 字段不会。
如同 match 查询这样的高层查询知道字段映射的关系,能为每个被查询的字段应用正确的分析器。 可以使用 validate-query API 查看这个行为:
GET /my_index/my_type/_validate/query?explain { "query": { "bool": { "should": [ { "match": { "title": "Foxes"}}, { "match": { "english_title": "Foxes"}} ] } } }
返回语句的 explanation 结果:
(title:foxes english_title:fox)
match 查询为每个字段使用合适的分析器,以保证它在寻找每个项时都为该字段使用正确的格式。
虽然我们可以在字段层级指定分析器, 但是如果该层级没有指定任何的分析器,那么我们如何能确定这个字段使用的是哪个分析器呢?
分析器可以从三个层面进行定义:按字段(per-field)、按索引(per-index)或全局缺省(global default)。Elasticsearch 会按照以下顺序依次处理,直到它找到能够使用的分析器。索引时的顺序如下:
字段映射里定义的 analyzer ,否则
索引设置中名为 default 的分析器,默认为
standard 标准分析器
在搜索时,顺序有些许不同:
查询自己定义的 analyzer ,否则
字段映射里定义的 analyzer ,否则
索引设置中名为 default 的分析器,默认为
standard 标准分析器
有时,在索引时和搜索时使用不同的分析器是合理的。 我们可能要想为同义词建索引(例如,所有 quick 出现的地方,同时也为 fast 、 rapid 和 speedy 创建索引)。但在搜索时,我们不需要搜索所有的同义词,取而代之的是寻找用户输入的单词是否是 quick 、 fast 、 rapid 或 speedy 。
为了区分,Elasticsearch 也支持一个可选的 search_analyzer 映射,它仅会应用于搜索时( analyzer 还用于索引时)。还有一个等价的 default_search 映射,用以指定索引层的默认配置。
如果考虑到这些额外参数,一个搜索时的 完整 顺序会是下面这样:
查询自己定义的 analyzer ,否则
字段映射里定义的 search_analyzer ,否则
字段映射里定义的 analyzer ,否则
索引设置中名为 default_search 的分析器,默认为
索引设置中名为 default 的分析器,默认为
standard 标准分析器
Analysis 叫做分词,就是将文本转换为一系列单词(term/token)的过程。
Analysis 是通过Analyzer来实现的。
可使用Elasticserach内置的分析器或按需优化分需求或安装分析器插件 。
在数据写入的时候转换词条于Query语句查询的时候也需要用相同的分析器。
Character Filter 针对原始文本处理,例如去除html。
Tokenizer 按规则切分为单词。Tokenizer Filter将切分的单词进行加工,小写,删除stopwords,增加同义词。
1) _analyzer API 三种使用方法
2) Standard Analyzer
原理
示例
3)Simple Analyzer
原理
示例
4)Whitespace Analyzer
原理
示例
5)Stop Analyzer
原理
示例
6)Keyword Analyzer
原理
示例
7)Pattern Analyzer
原理
示例
8)Language Analyzer
支持按语言分词
示例
中文分词的难点:
中文句子,切成一个一个词(不是一个一个字)。英文中,单词有自然的空格作为分隔。一句中文,在不同的上下文,有不同的理解。
1)ICU Analyzer
原理
演示(需要提前安装 ICU Analyze 插件)
2)IK
3) THULAC
读到这里,这篇“基于ElasticSearch Analyzer的使用规则是什么”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注创新互联-成都网站建设公司行业资讯频道。