这是我参与8月更文挑战的第8天,活动详情查看:8月更文挑战markdown
本Elasticsearch相关文章的版本为:7.4.2app
全文本查询使您可以搜索已分词的文本字段例如电子邮件正文。使用在创建倒排索引期间应用于字段的相同分析器处理查询字符串。post
intervals
查询:容许对匹配项的顺序和接近度进行细粒度控制的全文本查询。spa
POST /intervals_test/_doc/1
{
"my_text": "my favorite food is cold porridge"
}
POST /intervals_test/_doc/2
{
"my_text": "when it's cold my favorite food is porridge"
}
复制代码
当各个匹配项有顺序要求时:
请求体:code
GET _search
{
"query": {
"match_all": {}
}
}
GET /_cat/indices
POST /intervals_test/_doc/1
{
"my_text": "my favorite food is cold porridge"
}
POST /intervals_test/_doc/2
{
"my_text": "when it's cold my favorite food is porridge"
}
POST /intervals_test/_search
{
"query": {
"intervals" : {
"my_text" : {
"all_of" : {
"ordered" : true,
"intervals" : [
{
"match" : {
"query" : "my favorite food",
"max_gaps" : 0,
"ordered" : true
}
},
{
"any_of" : {
"intervals" : [
{ "match" : { "query" : "hot water" } },
{ "match" : { "query" : "cold porridge" } }
]
}
}
]
}
}
}
}
}
复制代码
响应体:orm
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 1,
"relation" : "eq"
},
"max_score" : 0.3333333,
"hits" : [
{
"_index" : "intervals_test",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.3333333,
"_source" : {
"my_text" : "my favorite food is cold porridge"
}
}
]
}
}
复制代码
当各个匹配项没有顺序要求时:
请求体:索引
POST /intervals_test/_search
{
"query": {
"intervals" : {
"my_text" : {
"all_of" : {
"ordered" : false,
"intervals" : [
{
"match" : {
"query" : "my favorite food",
"max_gaps" : 0,
"ordered" : true
}
},
{
"any_of" : {
"intervals" : [
{ "match" : { "query" : "hot water" } },
{ "match" : { "query" : "cold porridge" } }
]
}
}
]
}
}
}
}
}
复制代码
响应体:ip
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 0.3333333,
"hits" : [
{
"_index" : "intervals_test",
"_type" : "_doc",
"_id" : "1",
"_score" : 0.3333333,
"_source" : {
"my_text" : "my favorite food is cold porridge"
}
},
{
"_index" : "intervals_test",
"_type" : "_doc",
"_id" : "2",
"_score" : 0.3333333,
"_source" : {
"my_text" : "when it's cold my favorite food is porridge"
}
}
]
}
}
复制代码
intervals查询的类型有:文档
match
prefix
wildcard
all_of
any_of
filter
返回知足match子句条件的文档,能够设定查询的字符串是否须要按照顺序以及分词之间的间隔等条件。
match类型的参数:字符串
参数 | 描述 |
---|---|
query | 用户查询的字符串 |
max_gaps | 字符串中每一个词在text field中出现的最大词间距,超过最大间距的将不会被检索到;默认值是-1,即不限制,设置为0的话,query中的字符串必须彼此相连不能拆分 |
ordered | query中的字符串是否须要有序显示,默认值是false,即不考虑前后顺序 |
analyzer | 对query参数中的字符串使用什么分词器,默认使用mapping时该field配置的 search analyzer |
filter | 能够为query搭配一个intervals filter,该filter不一样于Boolean filter 有本身的语法结构 |
其余类型的参数和match类型的参数用法同样。