在Elasticsearch中请求正文搜索

时间:2017-10-28 14:49:24

标签: elasticsearch

我正在使用Elasticsearch 5.4.1。这是映射:

If Target = Sheet1.range("$B$3") and Target.value = Sheet1.range("$C$2").value Then

    Sheet1.range("$C$3").value = Sheet1.range("$A$3").value

End If

当我使用URI搜索时,我会收到结果。另一方面,在使用Request Body搜索期间,无论如何都有空结果。

{
  "testi": {
    "mappings": {
      "testt": {
        "properties": {
          "last": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          },
          "name": {
            "type": "text",
            "fields": {
              "keyword": {
                "type": "keyword",
                "ignore_above": 256
              }
            }
          }
        }
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

在这里发生一些事情:

  • 对于lastname,您将字段索引为text,然后将子字段索引为keyword。这是你的意图吗?您希望能够在原始字段上进行分析/标记化搜索,然后在子字段上进行关键字搜索吗?
  • 如果这是您的意图,您现在有两种方法可以查询每个字段。例如,name为您提供了字段的分析版本(您设计的类型文本意味着Elasticsearch在其上应用了standard analyzer并应用了小写过滤器,一些基本的标记化和词干化等)和{{1 }}为您提供此字段的未更改关键字版本
  • 因此,您的字词查询要求您的输入字符串name.keyword与您要查询的字段匹配。由于您在查询输入中使用了大写,因此您可能希望使用John的关键字子字段,因此请尝试使用name
  • 作为原始字段发生情况的简要演示,"term" : { "name.keyword" : "John" } 也可以
  • 您在"term" : { "name.keyword" : "john" }中看到结果,因为它只是执行_search。如果您确实传递了基本文本参数,那么它将针对match_all执行,_all是每个文档中所有字段的串联,因此keywordtext版本都可用