es中对double类型字段会分词吗
时间: 2024-06-03 11:12:20 浏览: 91
在Elasticsearch中,double类型字段通常被视为数字类型,不会被分词。当你将一个double类型的字段定义为可搜索的(searchable)时,它会被索引为一个数字类型,可以进行范围查询和聚合操作。如果你需要对一个double类型的字段进行全文检索,你可以将它定义为text类型,这样它就会被分词。但是,这样做可能会导致一些问题,例如,数字和小数点可能会被分开,影响搜索的精度。因此,通常不建议将double类型字段定义为text类型。
相关问题
ElasticSearch字段类型
ElasticSearch支持许多不同类型的字段,包括:
1. 文本类型(Text type):用于全文搜索,支持分词和模糊匹配等操作。
2. 关键字类型(Keyword type):用于精确匹配,不分词。
3. 数值类型(Numeric types):用于数值计算和排序,包括整数(integer)、长整数(long)、浮点数(float)和双精度浮点数(double)。
4. 日期类型(Date type):用于存储日期和时间信息,支持各种日期格式。
5. 布尔类型(Boolean type):用于存储布尔值。
6. 二进制类型(Binary type):用于存储二进制数据,如图像、音频等。
7. 地理位置类型(Geo point type):用于存储地理位置信息,如经纬度坐标。
8. 地理形状类型(Geo shape type):用于存储地理形状信息,如多边形、圆形等。
9. IP地址类型(IP type):用于存储IP地址。
10. 对象类型(Object type):用于存储复杂的结构化数据。
11. 嵌套类型(Nested type):用于存储嵌套的结构化数据。
12. Completion类型(Completion type):用于自动完成搜索建议。
Java微服务项目:家具商城,搜索系统搭建用于 Lucene 全文检索的 Elasticsearch 服务器,创建商品索引库,使用 IK 分词器,同时定义分词,为用户搜索提供更准确的数据,最后将会检索出来的数据解析,以接口的方式给前台系统调用;实现代码流程
1. 首先,我们需要搭建Elasticsearch服务器。可以通过下载Elasticsearch的压缩包,解压后直接启动elasticsearch.bat(Windows系统)或elasticsearch命令(Linux系统)来启动Elasticsearch服务器。
2. 接下来,我们需要创建商品索引库。可以使用Elasticsearch提供的Java API来创建索引库。创建索引库的过程中,我们需要定义索引库的映射关系,即定义每个字段的数据类型和分词器。在这里,我们使用IK分词器来进行分词。可以使用以下代码来创建商品索引库:
```java
// 创建索引
CreateIndexRequest createIndexRequest = new CreateIndexRequest("product");
client.indices().create(createIndexRequest, RequestOptions.DEFAULT);
// 定义映射关系
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.startObject("properties");
{
builder.startObject("id");
{
builder.field("type", "long");
}
builder.endObject();
builder.startObject("name");
{
builder.field("type", "text");
builder.field("analyzer", "ik_max_word");
builder.field("search_analyzer", "ik_max_word");
}
builder.endObject();
builder.startObject("description");
{
builder.field("type", "text");
builder.field("analyzer", "ik_max_word");
builder.field("search_analyzer", "ik_max_word");
}
builder.endObject();
builder.startObject("price");
{
builder.field("type", "double");
}
builder.endObject();
builder.startObject("image");
{
builder.field("type", "keyword");
}
builder.endObject();
}
builder.endObject();
}
builder.endObject();
PutMappingRequest putMappingRequest = new PutMappingRequest("product").source(builder);
client.indices().putMapping(putMappingRequest, RequestOptions.DEFAULT);
```
3. 然后,我们需要为商品建立索引。可以使用以下代码将商品数据添加到索引库中:
```java
// 建立索引
IndexRequest indexRequest = new IndexRequest("product");
indexRequest.id(product.getId().toString());
indexRequest.source("id", product.getId(),
"name", product.getName(),
"description", product.getDescription(),
"price", product.getPrice(),
"image", product.getImage());
client.index(indexRequest, RequestOptions.DEFAULT);
```
4. 接下来,我们需要实现搜索功能。可以使用Elasticsearch提供的Java API来进行搜索。在搜索之前,我们需要先定义查询条件。在这里,我们使用MultiMatchQueryBuilder来进行多字段匹配。可以使用以下代码来实现搜索功能:
```java
// 定义查询条件
MultiMatchQueryBuilder queryBuilder = QueryBuilders.multiMatchQuery(keyword, "name", "description");
// 搜索
SearchRequest searchRequest = new SearchRequest("product");
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
searchSourceBuilder.query(queryBuilder);
searchRequest.source(searchSourceBuilder);
SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);
// 解析搜索结果
List<Product> productList = new ArrayList<>();
SearchHits hits = searchResponse.getHits();
for (SearchHit hit : hits) {
Product product = new Product();
product.setId(Long.parseLong(hit.getId()));
product.setName(hit.getSourceAsMap().get("name").toString());
product.setDescription(hit.getSourceAsMap().get("description").toString());
product.setPrice(Double.parseDouble(hit.getSourceAsMap().get("price").toString()));
product.setImage(hit.getSourceAsMap().get("image").toString());
productList.add(product);
}
return productList;
```
5. 最后,我们需要将搜索功能以接口的方式提供给前台系统调用。可以使用Spring MVC框架来实现接口。可以使用以下代码来实现接口:
```java
@RestController
public class ProductController {
@Autowired
private ProductService productService;
@GetMapping("/search")
public List<Product> search(@RequestParam String keyword) {
return productService.search(keyword);
}
}
```
在上述代码中,我们使用@GetMapping注解来定义接口的请求方式,并使用@RequestParam注解来获取请求参数。然后,我们调用ProductService的search方法来进行搜索,并将搜索结果返回给前台系统。
综上所述,Java微服务项目:家具商城,搜索系统搭建用于Lucene全文检索的Elasticsearch服务器,创建商品索引库,使用IK分词器,同时定义分词,为用户搜索提供更准确的数据,最后将会检索出来的数据解析,以接口的方式给前台系统调用的实现流程如上所述。
阅读全文