07.full text query_string查询

1. query string简介

GET /_search
{
    "query": {
        "query_string" : {
            "default_field" : "content",
            "query" : "this AND that OR thus"
        }
    }
}

query_string查询分析输入内容并在运算符周围拆分文本。每个文本部分彼此独立地进行分析。例如以下查询:
如果不指定default_field的话,则默认会在(当前index,如果制定了index的话)所有可以查询的字段中进行查询

GET /_search
{
    "query": {
        "query_string" : {
            "default_field" : "content",
            "query" : "(new york city) OR (big apple)" 
        }
    }
}

2. multi field 多字段查询

GET /_search
{
    "query": {
        "query_string" : {
            "fields" : ["content", "name"],
            "query" : "this AND that"
        }
    }
}

等价于


GET /_search
{
    "query": {
        "query_string": {
            "query": "(content:this OR name:this) AND (content:that OR name:that)"
        }
    }
}

由于从单个搜索项生成了多个查询,因此使用dis_max带有tie_breaker 的查询自动组合它们。例如(name使用^5符号表示增强5 ):

GET /_search
{
    "query": {
        "query_string" : {
            "fields" : ["content", "name^5"],
            "query" : "this AND that OR thus",
            "tie_breaker" : 0
        }
    }
}

简单通配符也可用于搜索文档的特定内部元素“内”。例如,如果我们有一个city包含多个字段(或带有字段的内部对象)的对象,我们可以自动搜索所有“城市”字段:

GET /_search
{
    "query": {
        "query_string" : {
            "fields" : ["city.*"],
            "query" : "this AND that OR thus"
        }
    }
}

另一种选择是在查询字符串本身中提供通配符字段搜索(正确转义*符号),例如 city.*:something:

GET /_search
{
    "query": {
        "query_string" : {
            "query" : "city.\\*:(this AND that OR thus)"
        }
    }
}

由于\(反斜杠)是json字符串中的特殊字符,因此需要对其进行转义,因此上面的两个反斜杠query_string

3. query string 的语法

这个有点类似于高级语义了,在kibana的对应的框中能够使用对应lucene语法,使用的就是query string的语法,也就是query_string对应的query字符串还可以有一些语法来支持更加灵活的查询。

1. 在query中查询其他特定的字段

查找status field中包含 active的doc
status:active

查找title中包含quick 或者 brown的doc
title:(quick OR brown)

查找author字段包括短语"john smith" 的doc
author:“John Smith”

如果field name中有空格的话要用反斜杠包裹
first\ name:Alice

比如 book.title, book.content or book.date 这些field 包含 quick 或者 brown (*号要使用反斜杠转义):
book.*:(quick OR brown)

判断field存在
exists:title

2. 通配符

通配符搜索可以在单个term上运行,使用?替换单个字符,并*替换零个或多个字符:

qu?ck bro*


3. 正则表达式

正则表达式模式可以通过将它们包装在forward-slashes("/")中嵌入查询字符串中:

name:/joh?n(ath[oa]n)/

4. 模糊匹配

quikc~ brwn~ foks~

quikc~1 编辑距离是1

5. 临近匹配

proximity searches

"fox quick"~5

这个编辑距离和上面的模糊匹配的不一样,模糊匹配的是针对单个term词的字符级别的编辑距离,这里的编辑距离是word级别的编辑距离。所以词出现的顺序也可以是不同的。

“quick fox” 会被认为比 “quick brown fox” 更相关。

5. range范围

date在2012年内
date:[2012-01-01 TO 2012-12-31]

date在2012之前
date:{* TO 2012-01-01}

数字count在1-5中间
count:[1 TO 5]

数字count在10以上
count:[10 TO *]

不包括5
count:[1 TO 5}

还可以使用下面的语法

age:>10
age:>=10
age:<10
age:<=10

age:(>=10 AND <20)
age:(+>=10 +<20)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值