一尘不染

对Elasticsearch查询感到困惑

elasticsearch

        POST http://localhost:9200/test2/drug?pretty
        {
          "title": "I can do this"
        }


        get test2/drug/_search
        {
          "query" : {
            "match": {
              "title": "cancer"
            }
          }
        }

映射为:

        {
           "test2": {
              "mappings": {
                 "drug": {
                    "properties": {
                       "title": {
                          "type": "string"
                       }
                    }
                 }
              }
           }
        }

运行以上查询将返回文档。我想了解松紧带在幕后做什么?通过查看默认分析器的输出,它不会标记癌症,使其返回“可以”,那么为什么返回带有“可以”一词的文档,又是什么原因导致该文档被返回呢?换句话说,搜索查询“癌症”正在发生什么其他处理。

更新

我是否可以在我的机器上运行一个命令,该命令将清除所有索引和所有内容,因此我的表盘整洁?我执行了删除/ *的操作,但成功了,但仍然匹配了。


阅读 225

收藏
2020-06-22

共1个答案

一尘不染

测试的问题是,如果您使用的是Sense,则是get请求。在某种意义上,它应该是GET(大写字母)。

解释GETPOSTvs.http方法有关。在实际情况下,Sense实际上将GET请求转换为HTTP POST(鉴于许多浏览器不支持带有请求正文的HTTP
GET请求
)。这意味着,即使您进行编写GET,实际的http请求也是POST

由于Sense具有强制将大写字母用于请求方法的自动完成功能,因此在确定是否与请求正文一起使用GET(而不是小写get)请求时,将使用相同的大写字母。如果是,那么该请求将转换为POST一个。如果比较请求方法并确定不是GET,则按原样发送请求,即使用get方法和正文。由于忽略了主体,因此到达Elasticsearch的对象将test2/drug/_search基本上是a
match_all

2020-06-22