如何使用 NEST 与 ElasticSearch 进行 guid 匹配

How to do a guid match with ElasticSearch using NEST

我有 ES 文档,其中一个字段是一个 guid。

当我尝试进行匹配时,破折号在我的搜索中造成严重破坏,我得到了一堆不相关的部分匹配。

由于此字段是一个 guid,因此它始终需要完全匹配。

在 Kibana 中,我可以将 guid 括在引号中并得到完全匹配;对于 NEST,引号无济于事。我也试图逃避破折号但没有成功。

我需要按原样存储 guid,因为在某些情况下我必须在检索文档时保持 guid 不变,所以我无法删除其中的破折号。

有没有办法用 NEST 标记那个字段,这样当我查询它时,只有完全匹配的 returned?


编辑: 按照下面的答案,这是我所做的:

但这 return 什么都没有。

弹性站点的文档给出了一个例子(https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/terms-query-usage.html):

q
.Terms(c => c
.Name("named_query")
.Boost(1.1)
.Field(p => p.Description)
.Terms("term1", "term2")
)

我找不到任何关于 Name 方法的文档,而且我所做的看起来很相似,对于单个字段,所以我不知道它对我的情况有什么影响,如果有的话。

我的领域的映射,从 Kibana 看,是:

 "mapping": {
    "pictureobject": {
      "properties": {
        "AlbumId": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }

,

Guid 映射为 keyword type and use term level queries such as term query 以查找完全匹配项。

我参加聚会迟到了,但您可以像这个示例一样使用 MatchPhrase Methode:

await _elasticClient.SearchAsync<Employee>(
                s => s.Index(IndexName).Query(
                    q => q.MatchPhrase(tq =>
                        tq.Field(x => x.DepartmentId).Query(dep.Id.ToString())))