当前位置: 首页 > 知识库问答 >
问题:

从文档中获取精确结果的ElasticSearch查询

施洛城
2023-03-14

我有一个索引(名称:“index1”)指向ElasticSearch中的多个文档。

文档的格式(json)是-

{
  "_index": "index1",
  "_type": "someType",
  "_id": "randomIDBlahBlah",
  "_source": {
    "version": "2018",
    "fields": [
      {
        "field": "A.B",
        "lineNumber": 1
      },
      {
        "field": "C.D",
        "lineNumber": 2
      },
      {
        "field": "A.E",
        "lineNumber": 3
      }]
  },
  "fields": {
    "created": [
      "2017-01-19T20:11:07.977Z"
    ]
  },
  "sort": [
    2324343
  ]
}

下面是映射-

{
  "index1": {
    "mappings": {
      "mapping": {
        "properties": {
          "branch": {
            "type": "text"
          },
          "created": {
            "type": "date"
          },
          "fields": {
            "type": "nested",
            "properties": {
              "field": {
                "type": "text"
              },
              "lineNumber": {
                "type": "integer"
              }
            }
          }
        }
      }
    }
  }
}
POST index1/_search
{
 "query": {
   "bool": {
     "must": [
       {
         "bool": {
           "should": [
             {
               "nested": {
                 "path": "fields",
                 "query": {
                   "match_phrase": {
                     "fields.field": "A.B"
                   }
                 }
               }
             }
           ]
         }
       }
     ]
   }
 }
}

我在ES查询中哪里做错了?

共有1个答案

龚博涛
2023-03-14

如果字段不是type关键字,则必须添加type.keyword

这是由ES在“type”:“text”字段上自动生成的

GET index1/_search
{
 "query": {
   "bool": {
     "must": [
       {
         "bool": {
           "should": [
             {
               "nested": {
                 "path": "fields",
                 "query": {
                   "match_phrase": {
                     "fields.field.keyword: "A.B"
                   }
                 }
               }
             }
           ]
         }
       }
     ]
   }
 }
}```
 类似资料:
  • 问题内容: 我使用php对二进制文档(fscrawler)实现了elasticsearch。使用默认设置就可以正常工作。我可以在文档中搜索所需的单词,并且得到的结果不区分大小写。但是,我现在要进行精确匹配,即在当前搜索的顶部,如果查询用引号引起来,我想获得仅与查询完全匹配的结果。 我的映射如下所示: 我对文档的查询如下所示: 对于完全匹配(无效): 内容字段是文档的主体。如何在内容字段中实现特定单

  • 我使用php for binary documents(fscrawler)实现了elasticsearch。它在默认设置下工作得很好。我可以在文档中搜索我想要的单词,并得到不区分大小写的结果。然而,我现在想做精确匹配,即在当前搜索的顶部,如果查询被括在引号中,我想得到结果,只匹配查询完全…甚至区分大小写。 我的映射如下所示: 对于完全匹配(不起作用): 内容字段是文档的主体。如何实现内容字段中特

  • 问题内容: 我正在尝试使用ES作为MongoDB的索引。我已经成功地将它们集成在一起,但是我发现搜索API相当复杂且令人困惑。Java API也不太有用。 我可以找到完全匹配的内容,但是如何获得此结果?这是我的代码: 问题答案: 我不确定我是否理解您的问题。 如果要根据示例打印searchResponse的结果,则应为以下内容: 我正在使用Gson将Json响应转换为FireWall(POJO)。

  • 我想从ElasticSearch的结果文档中排除一个字段。我浏览了ElasticSearch.org的这个文档http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/search-request-fields.html但当我尝试时,这不起作用。我在SO上看到了同样的问题。有没有办法在Elasticsearch查询中

  • 为了在Lucene查询返回的文档中显示突出显示的匹配词,Lucene搜索结果可能包含用于将文档作为匹配我的请求返回的词。 例如: > Lucene查询:"狗猫" 结果:[“狗很好”,“狗和猫是朋友”] 如何通过Lucene实现这一点?我无法手动处理猫或狗,也无法处理请求词和返回词之间的任何差异。

  • 问题内容: 所以我有一个弹性的搜索索引,并且要向它发送带有时间戳的文档。我想知道是否有一种方法可以根据时间戳提取最后一个文档。即说要弹性给我最后一次的文档。 谢谢。 问题答案: 是的,您只需索取一个文档()并通过减少时间戳进行排序