一、elasticsearch搜索精准度排序
elasticsearch是一个具有强大搜索能力的搜索引擎,涉及到搜索精准度排序,通常需要先设置mapping,即定义index的字段类型、分词器等信息。然后,可以通过给相关字段加boost的方式,提高搜索结果相关度。
PUT /my-index
{
"mappings": {
"properties": {
"title": {
"type": "text",
"boost": 2
},
"content": {
"type": "text"
}
}
}
}
在上述代码中,对于title字段使用了boost=2的方式,表示搜索结果中带有匹配title关键词的文档权重将加倍。
二、elasticsearch集群
elasticsearch可以支持多个节点组成一个集群,增强数据可靠性和高可用性。 可以通过下面的方式创建一个集群:
PUT /my-index
{
"settings": {
"number_of_shards": 3,
"number_of_replicas": 2
}
}
上述代码中,number_of_shards表示该index被分成3个shards,而number_of_replicas=2表示每个shard对应的副本数是2个。
三、elasticsearch搜索引擎
elasticsearch作为一个搜索引擎,它的搜索能力来自于几个方面:
- 全文搜索。elasticsearch内置了一组强大的分词器,能够智能地处理中文、英文等多种语言的分词需求;
- 过滤器和聚合器。在搜索过程中,可以针对不同的条件设置各种过滤器和聚合器,比如日期范围、产品价格区间等;
- 搜索建议。elasticsearch内置了多种搜索建议算法,可以根据用户已经输入的部分关键词,给出相关的搜索建议。
四、elasticsearch搜索指定分词
在elasticsearch中,可以通过指定分词器的方式,控制搜索过程中使用的分词方式。 例如,在下面的代码中,使用了ik_max_word分词器来处理content字段的分词需求:
PUT /my-index
{
"mappings": {
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word"
},
"content": {
"type": "text",
"analyzer": "ik_max_word"
}
}
}
}
五、elasticsearch搜索商品
在电商场景中,通常需要使用elasticsearch来搜索商品。下面是一个例子,使用了match查询来实现搜索商品的功能:
GET /_search
{
"query": {
"match": {
"title": "MacBook"
}
}
}
上述代码中,匹配了title字段中包含MacBook关键词的商品。
六、elasticsearch搜索原理
elasticsearch搜索原理可以简单概括为:先根据用户输入的关键词构建Query DSL查询语句,然后在文档(Document)中进行搜索,找出与查询语句匹配的文档并返回。 搜索过程中通常包括以下几个步骤:
- 分词。elasticsearch内置了一组强大的分词器,能够智能地处理中文、英文等多种语言的分词需求;
- 查询解析。elasticsearch将查询语句解析成内部的Lucene查询语法;
- 搜索。elasticsearch会在所有的shard上执行查询,将结果合并之后返回给用户。在搜索过程中,elasticsearch会使用算法计算每个文档的得分,然后按照得分从高到低排序。
七、elasticsearch搜索方式
elasticsearch支持多种搜索方式,包括match查询、wildcard查询、range查询等。 下面是一个wildcard查询的例子:
GET /_search
{
"query": {
"wildcard": {
"title": "*book*"
}
}
}
上述代码中,匹配了title字段中包含book关键词的商品。
八、elasticsearch搜索过程
在搜索过程中,elasticsearch通常需要先执行分词、查询解析和搜索几个步骤。 以下是一个简单的搜索过程例子:
POST /my-index/_search
{
"query": {
"match":{
"title": "MacBook"
}
}
}
在上述代码中,先查询匹配title字段中包含MacBook的文档,然后返回搜索结果。
九、elasticsearch搜索语法
elasticsearch支持多种查询语法,包括Query DSL、URI Search等。 以下是一个URI Search的例子:
GET /my-index/_search?q=title:MacBook
上述代码中,使用了title关键词进行搜索。
十、elasticsearch搜索优化
在实际使用elasticsearch进行搜索时,需要考虑一些搜索优化技巧。 例如,可以通过使用bool查询来组合多种查询,提高搜索结果相关度:
GET /_search
{
"query":{
"bool":{
"must":[{
"match":{
"title":"最新款 MacBook Air"
}
}],
"should":[{
"match":{
"description":"轻薄便携,适合出差"
}
}],
"must_not":[{
"match":{
"color":"黄色"
}
}]
}
}
}
上述代码中,同时对title字段和description字段进行了查询,提高了搜索结果相关度。