原文链接: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、该工具类可以将数据库表...
ElasticSearch入门文章相关代码
ElasticSearch映射生成器该工具允许在创建索引时为索引生成映射或设置。 使用注释描述定义的映射字段安装二进制文件部署在Maven Central上,您可以将工件导入到您的项目中: < dependency> < groupId>...
elasticsearch5.5.0 的增删改查java api操作 支持新建mapping 根据实体类的注解方式生成 支持ik分词 支持新建index 根据实体类注解 支持删除index 增删改查操作都很详细 网上的版本大多数都是2.x的 最新的和旧的...
通过注释或编程API将实体属性到索引字段。 对数据库中的所有实体进行,以使用预先存在的数据初始化索引。 通过Hibernate ORM会话修改的实体进行,以始终使索引保持最新状态。 ,可轻松构建全文本搜索查询并以...
esmapper 是一个简单的双向映射器,用于从 Elasticsearch 数据库读取和写入 Java 对象。 这主要适用于将 ES 也用作无模式数据库,而不仅仅是用作搜索索引的人。 目前,要存储的类必须扩展提供 ID 和版本字段的公共...
史上最强大 generator反编译自动生成代码, ...6.拓展 为实体字段添加 solr es json 等注解信息 7.实体和mapper自动导入注解import信息 8.时间字段 自动添加@JsonFormat注解,前端返回年月日时分秒格式
史上最强大 generator反编译自动生成代码, 1.可以控制是否生成get set toString 方法 2.可以控制是否按照驼峰生成实体, 默认...6.拓展 为实体字段添加 solr es json 等注解信息 7.一键生成controller到mapper模板代
目录 知识产权..........................................................................................................................................................13 前言 13 ...
更新单个现有实体-一次更新实体的所有字段 获取多对一关系(部门公司) 获取一对多关系(公司部门) 更新实体一对多关系(公司部门)-添加两项,更新两项并删除一项-一次全部 复杂的选择-根据某些布尔条件构造条件...
工作单元-跟踪交易的变化, 更新刚刚更改的属性-节省资源, 像C#LINQ一样查询实体(带有JS函数名称)去做实现Entity.addUnique(),它允许UNIQUE键覆盖更多字段实现Entity.addPrimary(),允许在更多字段上使用...
内容涵盖:Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、 Redis、MySQL、Spring、Spring Boot、Spring Cloud、RabbitMQ、Kafka、 Linux 等技术栈 1、MyBatis 面试题 1、什么是 Mybatis 2、Mybaits...
10.4.5 添加多值字段 252 10.4.6 添加拨动开关设置 253 10.4.7 添加滑块设置 254 10.4.8 添加子设置视图 255 10.5 读取应用程序中的设置 256 10.6 更改应用程序中的默认设置 260 10.7 小结 263 第11章 基本数据持久...
总览一种轻量级抽象,用于构造围绕领域模型/实体的查询,可最大程度地减少魔术字符串,提供类型安全性,生成查询效果良好的查询,并提供一种去耦的方式来定义新的查询目标格式,从而使您可以改变主意数据,而不必...
规则为:实体中的属性名和数据库表的字段名相同,如: 对应的数据库字段: 2.4 注解的使用 2.4.1 @NotDbField 在某个实体Bean中,我们可能会有一些属性不对应数据库字段,这时我们需要在相应的 Geter方法中...
四 排除OSPF故障 1.不匹配的参数 使用debug ip ospf adj命令能够看到大多数的不匹配问题。 (1)hello/dead间隔不匹配——匹配才可以形成邻居。 (2)不匹配的认证类型——OSPF下有MD5和纯文本认证。 ...
程序中大多的实体或对象能够被序列化为包含键值对的JSON对象,键(key)是字段(field)或属性(property)的名字,值(value)可以是字符串、数字、布尔类型、另一个对象、值数组或者其他特殊类型,比如表示日期的字符串...