1.most_fields 这种方式搜索也存在某些问题

  • 它不能使用 operator 或 minimum_should_match 参数来降低次相关结果造成的长尾效应。

2.词 peter 和 smith 都必须出现,但是可以出现在任意字段中。

3.cross_fields 类型首先分析查询字符串并生成一个词列表,然后它从所有字段中依次搜索每个词。这种不同的搜索方式很自然的解决了 字段中心式 查询三个问题中的二个

4.经典案例

GET /_validate/query?explain
{
"query": {
"multi_match": {
"query": "peter smith",
"type": "cross_fields",
"operator": "and",
"fields": [ "first_name", "last_name" ]
}
}
}

参考:https://www.elastic.co/guide/cn/elasticsearch/guide/current/_cross_fields_queries.html

---------------------------------------------------------------------------------------------------------------------------

1.正则结合cross_fields

PUT /addressbook/_doc/
{
"name":"test url",
"mobile":"123/456/url"
}
GET /addressbook/_search
{
"query": {
"multi_match": {
"query": ".*456.*", #.*去掉也一样的效果
"fields": ["name","mobile"]
}
}
}

---------------------------------------------------------------------------------------------------------

3.中文搜索,cross_field

3.1.定义映射

PUT yanbao072702
"mappings": {
"_doc"{
"properties": {
"title": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"author": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"institution": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"industry": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"grade": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"doc_type": {
"type": "text",
"analyzer": "ik_max_word",
"search_analyzer": "ik_max_word"
},
"time": {
"type": "date" ,
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
},
"doc_uri": {
"type": "text",
"index":false
},
"doc_size": {
"type": "integer",
"index":false
},
"market": {
"type": "byte"
}
}
}
}
}'

3.2 插入数据

PUT /yanbao0727/_bulk
{"index":{"_id":""}}
{"title":"香港-报告","author":"中信证券","institution":"中信中国","industry":"testindustry","grade":"testgrade","doc_type":"testdoc_type","time":"2019-07-27","doc_uri":"www.baidu.com","doc_size":"10M","market":"cn"}

3.3 测试分词器

POST _analyze
{
"analyzer": "ik_smart",
"text":"test报告"
}

3.4 搜索“君安 报告”

POST /yanbao0727/_search
{
"query": {
"multi_match": {
"query": "报告 君安",
"type": "cross_fields",
"fields": ["author","title"]
}
}
}

3.5 搜索结果

{
"_index" : "yanbao0727",
"_type" : "_doc",
"_id" : "",
"_score" : 2.6205368,
"_source" : {
"title" : "test报告",
"author" : "国泰君安",
"institution" : "君安证券",
"industry" : "testindustry",
"grade" : "testgrade",
"doc_type" : "testdoc_type",
"time" : "2019-07-27",
"doc_uri" : "www.baidu.com",
"doc_size" : "10M",
"market" : "cn"
}
}

参考:https://www.cnblogs.com/dxf813/p/8447196.html

elasticsearch的cross_fields查询的更多相关文章

  1. elasticsearch GIS空间查询问题解决

    在GIS行业的应用越来越广泛,GIS最常用根据区域进行空间数据查询     我定义了两个方法,一起来看一下: /** * geodistance filter * 一个过滤器来过滤基于一个特定的距离从 ...

  2. Elasticsearch文档查询

    简单数据集 到目前为止,已经了解了基本知识,现在我们尝试用更逼真的数据集,这儿已经准备好了一份虚构的JSON,关于客户银行账户信息的.每个文档的结构如下: { , , "firstname& ...

  3. Elasticsearch(GEO)空间检索查询

    Elasticsearch(GEO)空间检索查询python版本 1.Elasticsearch ES的强大就不用多说了,当你安装上插件,搭建好集群,你就拥有了一个搜索系统. 当然,ES的集群优化和查 ...

  4. 利用kibana插件对Elasticsearch进行bool查询

    #bool查询#老版本的filtered查询已经被bool代替#用 bool包括 must should must_not filter来完成 ,格式如下:#bool:{#  "filter ...

  5. java操作elasticsearch实现前缀查询、wildcard、fuzzy模糊查询、ids查询

    1.前缀查询(prefix) //prefix前缀查询 @Test public void test15() throws UnknownHostException { //1.指定es集群 clus ...

  6. java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)

    1.条件match query查询 //条件查询match query @Test public void test10() throws UnknownHostException { //1.指定e ...

  7. java使用elasticsearch进行模糊查询-已在项目中实际应用

    java使用elasticsearch进行模糊查询 使用环境上篇文章本人已书写过,需要maven坐标,ES连接工具类的请看上一篇文章,以下是内容是笔者在真实项目中运用总结而产生,并写的是主要方法和思路 ...

  8. Elasticsearch 常用基本查询

    安装启动很简单,参考官网步骤:https://www.elastic.co/downloads/elasticsearch 为了介绍Elasticsearch中的不同查询类型,我们将对带有下列字段的文 ...

  9. kibana和ElasticSearch的信息查询检索

    使用kibana来进行ElasticSearch的信息查询检索 大家经常会听到使用ELK搭建日志管理平台.完成日志聚合检索的功能,那么这个平台到底是个什么概念,怎么搭建,怎么使用呢? ELK包括Ela ...

随机推荐

  1. 关于 keepalived+lvs 中参数 persistence_timeout 的说明

    在keepalived+lvs的配置文件keepalived.conf中有一个选项persistence_timeout 该选项的作用:在一定时间内使来自于同一个Client的所有TCP请求被负载到同 ...

  2. JavaScript中undefined和not defined 的区别

    参考:某个大佬的博客 以下原创: <script type="text/javascript"> console.log(a); a = 100; </scrip ...

  3. 小程序开发之后台mybatis逆向工程(二)

    上一节搭建好了SSM后台框架,这一节将根据表结构创建实体及映射文件以及mapper接口.如果表过多,会很麻烦,所以mybatis提供了逆向工程来解决这个问题. 上一节 SSM搭建后台管理系统 逆向工程 ...

  4. javaScript第二篇

    事件处理函数 javaScript响应用户操作等都是通过事件处理来触发;其基本形式为 event = "javaScript statement(s);" 事件 = "事 ...

  5. Codeforces 1167 E Range Deleting 双指针+思维

    题意 给一个数列\(a​\),定义\(f(l,r)​\)为删除\(a​\)中所有满足\(l<=a_i<=r​\)的数后的数列,问有多少对\((l,r)​\),使\(f(l,r)​\)是一个 ...

  6. Sql Server 基本使用

    一.登录sql server数据库 1.若需要连接本机数据库服务器,服务器名可以采用“local”.“.”“本机Ip”. 2.在连接sql server 之前,确保sql server服务已经启动,如 ...

  7. return返回方法值:狮子玩具

    public class Lion { String color ="黄色"; public void run(){ System.out.println("正在以0.1 ...

  8. 微信小程序“反编译”

    https://www.jianshu.com/p/ad8f417219e9 https://segmentfault.com/a/1190000018592740?utm_source=tag-ne ...

  9. Codeforces 981 D.Bookshelves(数位DP)

    Codeforces 981 D.Bookshelves 题目大意: 给n个数,将这n个数分为k段,(n,k<=50)分别对每一段求和,再将每个求和的结果做与运算(&).求最终结果的最大 ...

  10. Vue 新手学习笔记:vue-element-admin 之安装,配置及入门开发

    所属专栏: Vue 开发学习进步 说实话都是逼出来的,对于前端没干过ES6都不会的人,vue视频也就看了基础的一些但没办法,接下来做微服务架构,前端就用 vue,这块你负责....说多了都是泪,脚手架 ...