「javaes分词」java调用es分词查询

博主:adminadmin 2022-11-27 01:49:08 65

本篇文章给大家谈谈javaes分词,以及java调用es分词查询对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

ES自定义分词器

es的分词器往往包括3个低级构建块包:

Standard Analyzer

标准分析仪按照Unicode文本分段算法的定义,将文本分割成单词边界的分词。它删除了大多数标点符号,小写显示分词,并支持删除stop words。

Simple Analyzer

当遇到不是字母的字符时,简单的分析器会将文本分成条目。小写显示分词。

Whitespace Analyzer

空格分析器遇到任何空格字符时都会将文本分为多个项目。不会把分词转换为小写字母。

Stop Analyzer

停止分析仪和Simple Analyzer类似,但也支持stop words的删除。

Keyword Analyzer

一个“noop”分析器,它可以接受任何给定的文本,并输出完全相同的文本作为一个单词。

Pattern Analyzer

使用正则表达式拆分分词,支持lower-casing和stop words。

Language Analyzers

Elasticsearch提供许多语言特定的分析器,如英语或法语。

Fingerprint Analyzer

一个专门的分析仪,它可以创建一个可用于重复检测的指纹。

对中文文本以英文逗号作为分隔符分词:

将分析器设置到索引上

获取分词结果

es 节点层面的默认分词设置已经废弃,不支持了。就是说在 elasticsearch.yml 配置诸如:

无效,会导致es启动失败:

推荐在索引层面动态设置。

五、ES的分词

可以看到中文字符串的都拆成了一个个字;

还有一种我们可以查询文档中某一个属性的拆分分析

并且不论大小写都会转换成小写

还有一种非标准的分词器,"analyzer":"simple",这种分词器可以将非字母的都给拆分开来。

"analyzer":"whitespace",这种分词器可以以空格来拆分词语。

"analyzer":"stop",这种分词器可以去掉一些无意义的单词;

"analyzer":"keyword",这种分词器可以把字符串当成一个整体,不会进行详细的进一步拆分。

es自定义分词器插件通过IntelliJ Idea进行远程调试

2.1点击红色边框-点击Edit Configuration-点击左上角绿色的+号-remote

2.2 然后填入下图的内容, host为远程的主机ip,我这儿填写的是es集群机器ip,host端口随便填写一个,只要该端口未被占用即可。

2.3 配置es中的jvm,在jvm.options的结尾加上图2生成的

-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5000

2.4 然后本地分词器打上断点,给es的设置了分析器的字段推上数据,然后就可以进入到本地的分词器中。

elasticsearch映射的数据类型有哪些

es支持大多数java里面的数据类型:

(一)核心数据类型:

(1)string: 默认会被分词,一个完整示例如下

"status": {

"type": "string", //字符串类型

"index": "analyzed"//分词,不分词是:not_analyzed ,设置成no,字段将不会被索引

"analyzer":"ik"//指定分词器

"boost":1.23//字段级别的分数加权

"doc_values":false//对not_analyzed字段,默认都是开启,分词字段不能使用,对排序和聚合能提升较大性能,节约内存

"fielddata":{"format":"disabled"}//针对分词字段,参与排序或聚合时能提高性能,不分词字段统一建议使用doc_value

"fields":{"raw":{"type":"string","index":"not_analyzed"}} //可以对一个字段提供多种索引模式,同一个字段的值,一个分词,一个不分词

"ignore_above":100 //超过100个字符的文本,将会被忽略,不被索引

"include_in_all":ture//设置是否此字段包含在_all字段中,默认是true,除非index设置成no选项

"index_options":"docs"//4个可选参数docs(索引文档号) ,freqs(文档号+词频),positions(文档号+词频+位置,通常用来距离查询),offsets(文档号+词频+位置+偏移量,通常被使用在高亮字段)分词字段默认是position,其他的默认是docs

"norms":{"enable":true,"loading":"lazy"}//分词字段默认配置,不分词字段:默认{"enable":false},存储长度因子和索引时boost,建议对需要参与评分字段使用 ,会额外增加内存消耗量

"null_value":"NULL"//设置一些缺失字段的初始化值,只有string可以使用,分词字段的null值也会被分词

"position_increament_gap":0//影响距离查询或近似查询,可以设置在多值字段的数据上火分词字段上,查询时可指定slop间隔,默认值是100

"store":false//是否单独设置此字段的是否存储而从_source字段中分离,默认是false,只能搜索,不能获取值

"search_analyzer":"ik"//设置搜索时的分词器,默认跟ananlyzer是一致的,比如index时用standard+ngram,搜索时用standard用来完成自动提示功能

"similarity":"BM25"//默认是TF/IDF算法,指定一个字段评分策略,仅仅对字符串型和分词类型有效

"term_vector":"no"//默认不存储向量信息,支持参数yes(term存储),with_positions(term+位置),with_offsets(term+偏移量),with_positions_offsets(term+位置+偏移量) 对快速高亮fast vector highlighter能提升性能,但开启又会加大索引体积,不适合大数据量用

}

(2)数字类型主要如下几种:

long:64位存储

integer:32位存储

short:16位存储

byte:8位存储

double:64位双精度存储

float:32位单精度存储

支持参数:

coerce:true/false 如果数据不是干净的,将自动会将字符串转成合适的数字类型,字符串会被强转成数字,浮点型会被转成整形,经纬度会被转换为标准类型

boost:索引时加权因子

doc_value:是否开启doc_value

ignore_malformed:false(错误的数字类型会报异常)true(将会忽略)

include_in_all:是否包含在_all字段中

index:not_analyzed默认不分词

null_value:默认替代的数字值

precision_step:16 额外存储对应的term,用来加快数值类型在执行范围查询时的性能,索引体积相对变大

store:是否存储具体的值

(3)复合类型

数组类型:没有明显的字段类型设置,任何一个字段的值,都可以被添加0个到多个,要求,他们的类型必须一致:

对象类型:存储类似json具有层级的数据

嵌套类型:支持数组类型的对象Aarray[Object],可层层嵌套

(4)地理类型

geo-point类型: 支持经纬度存储和距离范围检索

geo-shape类型:支持任意图形范围的检索,例如矩形和平面多边形

(5)专用类型

ipv4类型:用来存储IP地址,es内部会转换成long存储

completion类型:使用fst有限状态机来提供suggest前缀查询功能

token_count类型:提供token级别的计数功能

mapper-murmur3类型:安装sudo bin/plugin install mapper-size插件,可支持_size统计_source数据的大小

附件类型:需要 开源es插件支持,可存储office,html等类型

(6)多值字段:

一个字段的值,可以通过多种分词器存储,使用fields参数,支持大多数es数据类型

ES中的分词器

全文搜索引擎会用某种算法对要建索引的文档进行分析, 从文档中提取出若干 Token(词元) , 这些算法称为 Tokenizer(分词器) , 这些Token会被进一步处理, 比如转成小写等, 这些处理算法被称为 Token Filter(词元处理器) ,被处理后的结果被称为 Term(词) , 文档中包含了几个这样的Term被称为 Frequency(词频) 。 引擎会建立Term和原文档的Inverted Index(倒排索引), 这样就能根据Term很快到找到源文档了。 文本被Tokenizer处理前可能要做一些预处理, 比如去掉里面的HTML标记, 这些处理的算法被称为 Character Filter(字符过滤器) , 这整个的分析算法被称为 Analyzer(分析器) 。

整个分析过程,如下图所示:

从第一部分内容可以看出:Analyzer(分析器)由Tokenizer(分词器)和Filter(过滤器)组成。

ES允许用户通过配置文件elasticsearch.yml自定义分析器Analyzer,如下:

上面配置信息注册了一个分析器myAnalyzer,在次注册了之后可以在索引或者查询的时候直接使用。该分析器的功能和标准分析器差不多,tokenizer: standard,使用了标准分词器 ;filter: [standard, lowercase, stop],使用了标准过滤器、转小写过滤器和停用词过滤器。

ElasticSearch默认使用的标准分词器在处理中文的时候会把中文单词切分成一个一个的汉字,所以在很多时候我们会发现效果并不符合我们预期,尤其在我们使用中文文本切分之后本该为一个词语却成了单个的汉字,因此这里我们使用效果更佳的中文分词器es-ik。

ik 带有两个分词器:

区别:

下面我们来创建一个索引,使用 ik。创建一个名叫 iktest 的索引,设置它的分析器用 ik ,分词器用 ik_max_word,并创建一个 article 的类型,里面有一个 subject 的字段,指定其使用 ik_max_word 分词器。

批量添加几条数据,这里我指定元数据 _id 方便查看,subject 内容为我随便找的几条新闻的标题

查询 “希拉里和韩国”

这里用了高亮属性 highlight,直接显示到 html 中,被匹配到的字或词将以红色突出显示。若要用过滤搜索,直接将 match 改为 term 即可。

五、Es分词,_analyze

1、什么是分析

在文档被发送并加入倒排索引之前,Es在主体上进行的操作;

a、字符过滤器: 使用字符过滤转变字符

b、 分词器:文本切分为分词,将文本切分为单个或多分分词

c、分词过滤器: 使用分词过滤器转变分词

d、分词索引: 将这些分词存储到索引中

e、分析流程图:

2、自定义分析器

包含零个或多个字符过滤器、1个分词器、零个或多个分词过滤器

注意:

3、为文档使用分词器

3.1、在创建索引的时候添加分词器

3.2、在映射中指定某个字段的分析器

3.3、在Elasticsearch的配置文件中设置全局的分析器

4、使用分析API来分析文本

5、使用词条向量来学习索引词条

关于javaes分词和java调用es分词查询的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。

The End

发布于:2022-11-27,除非注明,否则均为首码项目网原创文章,转载请注明出处。