ElasticSearch下载
下载地址:ElasticSearch官网下载地址
Elasticsearch对jdk有版本要求:Elasticsearch官网版本要求
Windows下的Elasticsearch下载完压缩包,直接解压即可,通过安装目录下的bin\elasticsearch.bat启动
ElasticSearch端口介绍
- 9200端口:9200作为Http协议,主要用于外部通讯,http接口用的就是这个端口。一般都是给ElasticSearch-Head等工具连接ElasticSearch使用的。
- 9300端口:9300作为Tcp协议,jar之间就是通过tcp协议通讯。ES集群之间是通过9300进行通讯。
ElasticSearch分词器
中文分词器
Elasticsearch中文分词我们采用Ik分词
安装
- 下载压缩包
- 在github上下载对应版本的分词器
- 将下载的ik分词器的压缩包复制到es安装目录下的plugin目录下并解压即可
- 直接通过命令安装
- 进入github上找到对应版本的分词器的地址
- 在es安装目录bin目录下执行一下命令:elasticsearch-plugin.bat install <对应版本ik分词器地址>
测试
ik分词器有两种分词模式,ik_max_word,和ik_smart模式
- ik_max_word:会将文本做最细粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,中华人民,中华,华人,人民共和国,人民,人,民,共和国,共和,和,国国,国歌”,会穷尽各种可能的组合
- ik_smart: 会做最粗粒度的拆分,比如会将“中华人民共和国国歌”拆分为“中华人民共和国,国歌”,既不会重复。只会不断往后分词


其他分词器
- Standard Analyzer - 默认分词器,按词切分,小写处理
- Simple Analyzer – 按照非字母切分(符号被过滤),小写处理
- Stop Analyzer – 小写处理,停用词过滤(the,a,is)
- Whitespace Analyzer – 按照空格切分,不转小写
- Keyword Analyzer – 不分词,直接将输入当作输出
- Patter Analyzer – 正则表达式,默认 \W+ (非字符分隔)
- Language – 提供了30多种常见语言的分词器
ES多字段查询multi_match的几种type
- BEST_FIELDS:将查询拆分为多个字段,并使用每一个字段中最匹配的文本作为匹配分值。应该适用于多个字段匹配文本的场景,例如全文搜索、文章标题/正文搜索。如果有一个字段完全匹配但其他字段不匹配,则该字段的分值将超过其他字段。示例:假设有3个字段(title、description、tags),对于查询“apple”,如果title完全匹配,则它将获得最高分数,如果其他字段也有匹配,这个分数将被累加。
- MOST_FIELDS:将查询拆分为多个字段,并将所有匹配的字段将其分值相加。适用于多个字段中所有匹配项都是同等重要的场景,例如产品名称、描述搜索。示例:同样是3个字段(title、description、tags),对于查询“apple”,如果3个字段都有匹配,则它们的分值将被累加,没有完全匹配的字段并不会获得更高的分值。
- CROSS_FIELDS:将查询视为单个字段,并将所有匹配项的权重相加得到文档分值。适用于多个字段中匹配的文本都有相同的重要性(权重),例如对于人名、电子邮件地址搜索。示例:对于3个字段(title、description、tags),如果它们包含子字符串”apple”,这些子字符串的匹配将被累加以获得文档的总分。
- PHRASE:搜索字段中包含精确短语匹配的文档。适合于必须以一组特定单词顺序搜索的场景,例如完整的诗歌、歌词等。示例:查询“apple pie”,只有包含按照这个顺序全匹配的字段才会获得高分。这里需要才提到一点,严格来讲,这里参考的是分词顺序,例如,如果查询参数使用的是自定义分词器,“阀门”被分为了三个词,而es文档使用的是默认分词器,那么“阀门”在es文档中就会被分为两个词,所以在这种情况,也是无法匹配的,因为当匹配到“阀”字时,会尝试匹配“阀门”,而es文档中“阀”后面是“门”,所以无法匹配。

- PHRASE_PREFIX:搜索以查询开头的短语匹配的文档。适用于需要根据用户输入搜索不完整的短语的场景,例如输入“re”然后给出匹配的所有词。示例:查询“a”将匹配“apple”、“apricot”等。
- BOOLEAN:搜索所有匹配的文档,查询可以使用通配符、布尔逻辑等高级语法。适用于需要高级查询操作的场景,例如过滤器。示例:使用布尔运算符“AND”、“OR”、“NOT”等,可以组合具有不同匹配条件的查询来精细化搜索。