这是我参与8月更文挑战的第15天,活动详情查看:8月更文挑战
本Elasticsearch相关文章的版本为:7.4.2
根据提供的查询字符串返回文档。但是使用具有限制的但容许存在错误语法的解析器且不报错,它会忽略查询字符串的任何无效部分。
simple_query_string语法
simple_query_string查询的query支持以下运算符:
+表示 AND 运算|表示 OR 操作-否定单个令牌"包装许多标记以表示用于搜索的短语*在术语的末尾表示前缀查询(并)表示优先~N在一个词之后表示编辑距离(模糊)~N在一个短语表示废液量之后
要从字面上使用这些字符之一,需要在字符前面使用反斜杠 ( \)对其进行转义。
fields参数支持使用通配符*和使用^进行调整权重相对其他字段。
例子:
此查询将返回符合以下条件的文档:
- 在
title和body进行查询; - 需要在上述的两个字段中任何一个字段包含eggplant的文档,在title中包含eggplant的文档比在body中包含eggplant的文档权重大5倍;
- 或者不包含frittata的文档。
GET /_search
{
"query": {
"simple_query_string" : {
"query": "eggplant -frittata",
"fields": ["title^5", "body"]
}
}
}
如果想查询只包含eggplant同时不包含frittata的文档,应该这样:
GET /_search
{
"query": {
"simple_query_string" : {
"query": "eggplant +-frittata",
"fields": ["title^5", "body"]
}
}
}
flags参数可以限定simple_query_string的query中支持的运算符。
flags参数有效值:
-
ALL(默认)启用所有可选运算符。
-
AND启用
+AND 运算符。 -
ESCAPE``作为转义字符 启用。
-
FUZZY~N在单词后 启用运算符,其中N是一个整数,表示允许的匹配编辑距离。 -
NEAR在匹配标记之间允许的最大位置数的
~N短语之后 启用运算符N。同义SLOP。 -
NONE禁用所有运算符。
-
NOT启用
-NOT 运算符。 -
OR启用
|OR 运算符。 -
PHRASE启用
"用于搜索短语的引号运算符。 -
PRECEDENCE使
(和)运算符能够控制运算符优先级。 -
PREFIX启用
*前缀运算符。 -
SLOP在匹配标记之间允许的最大位置数的
~N短语之后 启用运算符N。同义NEAR。 -
WHITESPACE启用空格作为拆分字符。 例子:
下面的查询将只启用OR,AND和PREFIX语法:
GET /_search
{
"query": {
"simple_query_string" : {
"query" : "eggs | porridge + mea*",
"flags" : "OR|AND|PREFIX"
}
}
}