使用具有有限但容错语法的解析器,根据提供的查询字符串返回文档。
该查询使用简单的语法根据特殊操作符解析并将提供的查询字符串拆分为术语。然后,该查询在返回匹配的文档之前独立分析每个术语。
虽然它的语法比query_string查询更有限,但simple_query_string查询不会返回无效语法的错误。相反,它忽略查询字符串的任何无效部分。
示例
GET /_search
{
"query": {
"simple_query_string" : {
"query": "\"fried eggs\" +(eggplant | potato) -frittata",
"fields": ["title^5", "body"],
"default_operator": "and"
}
}
}
simple_query_string的顶层参数
query (必需的,字符串)您希望解析和用于搜索的查询字符串。请参见简单查询字符串语法。
feilds (可选,字符串数组)您希望搜索的字段的数组。该字段接受通配符表达式。您还可以使用插入符号(^)符号提高特定字段匹配的相关性得分。默认为index.query.default_field索引设置,其默认值为*。值提取符合术语查询条件的所有字段,并过滤元数据字段。如果没有指定前缀,则将所有提取的字段组合起来构建查询。
default_operator (可选,字符串)默认布尔逻辑,用于解释查询字符串中的文本,如果没有指定操作符。有效值:
- OR(默认)
- AND
analyze_wildcard (可选,布尔值)如果为true,查询将尝试分析查询字符串中的通配符术语。默认值为false。
analyzer (可选,字符串)用于将查询字符串中的文本转换为标记的分析器。默认为default_field映射的索引时分析器。如果没有映射分析器,则使用索引的默认分析器。
auto_generate_synonyms_phrase_query (可选,布尔值)如果为真,解析器为每个多位置标记创建一个match_phrase查询。默认值为true。
flags (可选,string)简单查询字符串语法启用的操作符列表。默认为ALL(所有操作符)。
fuzzy_max_expansions (可选,整数)查询为模糊匹配扩展到的最大术语数。默认值为50。
fuzzy_prefix_length (可选,整数)为模糊匹配保留不变的起始字符数。默认值为0。
fuzzy_transpositions (可选,布尔值)如果为真,编辑的模糊匹配包括两个相邻字符的转位(ab→ba)。默认值为true。
lenient (可选,布尔值)如果为true,基于格式的错误(例如为数字字段提供文本值)将被忽略。默认值为false。
minimum_should_match :(可选,字符串)必须匹配返回文档的最小子句数。查看minimum_should_match参数获取有效值和更多信息。
quote_field_suffix (可选,字符串)在查询字符串中附加到带引号文本的后缀。
您可以使用此后缀为精确匹配使用不同的分析方法。参见混合精确搜索与词干。
备注
simple_query_string的语法
simple_query_string查询支持以下操作符:
+
AND|
OR-
非"
包装许多标记以表示要搜索的短语*
在术语的末尾表示前缀查询(
and)
表示优先级~N
在一个单词之后表示编辑距离(模糊)~N
在短语后面表示溢出量
要按字面意思使用其中一个字符,请在前面加一个反斜杠(\)转义它。
这些操作符的行为可能因default_operator值的不同而不同。例如:
GET /_search
{
"query": {
"simple_query_string": {
"fields": [ "content" ],
"query": "foo bar -baz"
}
}
}
这个搜索的目的是只返回包含foo或bar但不包含baz的文档。然而,由于使用了OR的default_operator,这个搜索实际上返回了包含foo或bar的文档以及不包含baz的文档。要按预期返回文档,将查询字符串更改为foo bar +-baz。
限制操作符
您可以使用flags参数来限制简单查询字符串语法所支持的操作符。
若要显式地只启用特定的操作符,请使用|分隔符。例如,flags的值为OR|AND|PREFIX将禁用除OR、AND和PREFIX之外的所有操作符。
GET /_search
{
"query": {
"simple_query_string": {
"query": "foo | bar + baz*",
"flags": "OR|AND|PREFIX"
}
}
}
有效值
ALL 默认。启用所有可选操作符。
AND 启用+ AND操作符。
ESCAPE 启用\作为转义字符。
FUZZY 在单词后启用~N操作符,其中N是一个整数,表示允许进行匹配的编辑距离。看到模糊性。
NEAR 启用~N操作符,在短语后面,N是匹配标记之间允许的最大位置数。同义的slop。
NONE 禁用所有的操作符
NOT 启用- NOT操作符。
OR 启用\| OR操作符。
PHRASE 启用用于搜索短语的“操作符。
PRECEDENCE 启用(and)操作符来控制操作符优先级。
PREFIX 启用*前缀操作符。
SLOP 启用~N操作符,在短语后面,N是匹配标记之间允许的最大位置数。同义NEAR 了。
WHITESPACE 启用空格作为拆分字符。
通配符和每个字段增强fields参数
可以用通配符指定字段,例如:
GET /_search
{
"query": {
"simple_query_string" : {
"query": "Will Smith",
"fields": [ "title", "*_name" ]
}
}
}
单个字段可以使用插入符号(^)进行增强:
GET /_search
{
"query": {
"simple_query_string" : {
"query" : "this is a test",
"fields" : [ "subject^3", "message" ]
}
}
}
多位置tokens
默认情况下,simple_query_string查询解析器为查询字符串中的每个多位置标记创建一个match_phrase查询。例如,解析器为多词同义词ny, new york创建一个match_phrase查询:
(ny OR ("new york"))
如果要用AND连词匹配多位置标记,请设置 auto_generate_synonyms_phrase_query
为 false
:
GET /_search
{
"query": {
"simple_query_string": {
"query": "ny city",
"auto_generate_synonyms_phrase_query": false
}
}
}
对于上面的示例,解析器创建以下bool查询:
(ny OR (new AND york)) city)
这个bool查询将文档与术语ny或连词new AND york匹配。