原文链接:http://blog.csdn.net/dm_vincent/article/details/41862967
跨字段实体搜索(Cross-fields Entity Search)
现在让我们看看一个常见的模式:跨字段实体搜索。类似person,product或者address这样的实体,它们的信息会分散到多个字段中。我们或许有一个person实体被索引如下:
{
"firstname": "Peter",
"lastname": "Smith"
}
而address实体则是像下面这样:
{
"street": "5 Poland Street",
"city": "London",
"country": "United Kingdom",
"postcode": "W1V 3DG"
}
这个例子也许很像在多查询字符串中描述的,但是有一个显著的区别。在多查询字符串中,我们对每个字段都使用了不同的查询字符串。在这个例子中,我们希望使用一个查询字符串来搜索多个字段。
用户也许会搜索名为"Peter Smith"的人,或者名为"Poland Street W1V"的地址。每个查询的单词都出现在不同的字段中,因此使用dis_max/best_fields查询来搜索单个最佳匹配字段显然是不对的。
一个简单的方法
实际上,我们想要依次查询每个字段然后将每个匹配字段的分值进行累加,这听起来很像bool查询能够胜任的工作:
{
"query": {
"bool": {
"should": [
{ "match": { "street": "Poland Street W1V" }},
{ "match": { "city": "Poland Street W1V" }},
{ "match": { "country": "Poland Street W1V" }},
{ "match": { "postcode": "Poland Street W1V" }}
]
}
}
}
对每个字段重复查询字符串很快就会显得冗长。我们可以使用multi_match查询进行替代,然后将type设置为most_fields来让它将所有匹配字段的分值合并:
{
"query": {
"multi_match": {
"query": "Poland Street W1V",
"type": "most_fields",
"fields": [ "street", "city", "country", "postcode" ]
}
}
}
使用most_fields存在的问题
使用most_fields方法执行实体查询有一些不那么明显的问题:
1、它被设计用来找到匹配任意单词的多数字段,而不是找到跨越所有字段的最匹配的单词。
2、它不能使用operator或者minimum_should_match参数来减少低相关度结果带来的长尾效应。
3、每个字段的词条频度是不同的,会互相干扰最终得到较差的排序结果。
相关推荐
1、在Java开发中,常常需要将数据库表列字段换成Java实体类字段。但是手动实现这个转换过程比较慢,且容易出错,影响开发效率。为了解决这个问题,开发了这个Java实体类字段生成工具类。 2、该工具类可以将数据库表...
SpringBoot整合Elasticsearch是现代Java开发中常见的一项任务,因为SpringBoot的便捷性和Elasticsearch的高效搜索能力,使得这种结合在数据检索、分析和日志存储等领域广泛应用。本项目"springboot-elasticsearch-...
这个名为 "elasticsearch-analysis-ik-8.8.1.tar.gz" 的压缩包包含了IK分词器的最新版本,即8.8.1,适用于在Linux环境中使用的SpringData Elasticsearch全文搜索项目。在本文中,我们将深入探讨IK分词器的功能、如何...
《SpringData Elasticsearch全文搜索与IK分词器详解》 在现代大数据时代,高效的数据检索成为企业信息化的关键。SpringData Elasticsearch作为一款强大的Java库,为开发者提供了便捷地利用Elasticsearch进行数据...
Elasticsearch 分析插件 IK 分词器是用于优化全文搜索引擎性能的重要工具,特别是在中文文本处理方面。在 Spring Data Elasticsearch 框架中,IK 分词器被广泛应用于提升搜索精度和用户体验。本文将深入探讨 IK 分词...
Elasticsearch 分析插件 IK (Inverted Index) 是一个为中文处理而设计的强大分词器,常用于Spring Data Elasticsearch项目中,以实现高效的全文检索功能。IK分词器能够智能地对中文文本进行切词,提高搜索引擎的精确...
Elasticsearch 是一个分布式、开源的搜索引擎,它提供了全文搜索、分析和存储功能,广泛应用于日志分析、监控、信息检索等多个领域。Spring Data Elasticsearch 是 Spring 框架的一部分,它为与 Elasticsearch 的...
在IT领域,Elasticsearch作为一个强大的全文搜索引擎,因其高效、灵活和可扩展性,被广泛应用于数据检索、日志分析、监控等多种场景。Spring Data Elasticsearch是Spring Framework的一个子项目,它提供了一种方便的...
2. **实体映射**:通过注解将Java对象映射为Elasticsearch的文档,如`@Document`和`@Field`注解。 3. **Repository接口**:定义Repository接口,Spring Data会自动提供CRUD操作以及基于Elasticsearch查询语言(DSL)...
在全文搜索引擎的世界里,Elasticsearch(ES)是一个非常流行的开源解决方案,它提供高效、可扩展的搜索功能。而为了实现对中文文本的精准分词,我们需要依赖特定的分词器。IK (Intelligent Chinese) 分词器是针对 ...
首先,定义一个实体类,例如`User`,并使用`@Document`注解标识它是Elasticsearch中的一个文档类型。然后,使用`index`或`save`方法将对象保存到索引中。 2. **查询(Search)**: Elasticsearch 提供了多种查询方式...
Elasticsearch作为一款强大的分布式搜索引擎,因其高效、可扩展的特性,被广泛应用于各类场景。而SpringData Elasticsearch是Spring Data项目的一部分,它为Elasticsearch提供了方便的Java API,使得开发者可以更加...
Elasticsearch则是一种基于Lucene的搜索服务器,提供了一个分布式、多用户能力的全文搜索引擎,基于RESTful接口,易于集成到各种应用程序中。 在SpringBoot项目中整合Elasticsearch,首先需要添加对应的依赖。在`...
除了基本操作,Spring Data Elasticsearch还支持聚合分析、脚本字段、父子文档、自定义映射等高级特性。例如,使用聚合来统计不同作者的书籍数量: ```java Aggregation aggregation = searchQueryBuilder....
4. **实体映射**:定义 Elasticsearch 的实体类,使用 `@Document` 注解标识,并为每个字段添加对应的注解,比如 `@Field`,以指定索引、类型等属性。 5. **操作 Elasticsearch**:通过 Repository 实例,你可以...
**标题解析:** "es整合springboot-elasticsearch-demo" 这个标题暗示了这是一个关于如何将Elasticsearch集成到Spring Boot应用的示例项目。Elasticsearch是一个强大的分布式搜索引擎,而Spring Boot则是一个用于...
本示例"**Elasticsearch 集成spring-boot 搜索demo**"旨在展示如何在Spring Boot应用程序中无缝集成Elasticsearch,以实现高效的数据搜索功能。Elasticsearch是一个分布式、开源的全文搜索引擎,它提供了一个简单而...
SpringBoot与Elasticsearch结合是现代Java开发中常见的技术栈,用于构建高效、可扩展的搜索引擎和数据分析系统。本文将深入探讨SpringBoot如何与Elasticsearch集成,以及相关的知识点。 一、SpringBoot简介 ...
Elasticsearch(简称 ES)是一种基于 Lucene 的开源全文搜索引擎,被广泛应用于大数据分析、日志收集、实时搜索等领域。它的设计目标是分布式、可扩展、高可用且易用,支持RESTful API,使得与ES交互变得简单。 **...
2. **实体映射**:定义Elasticsearch的索引模型,通常我们创建一个Java类,使用`@Document`注解标记该类为Elasticsearch的文档类型,通过`@Field`注解来指定字段及其属性。 3. **Repository接口**:Spring Data ...