elasticsearch 如何使用NEST与ElasticSearch进行guid匹配,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何使用NEST与ElasticSearch进行guid匹配,elasticsearch,nest,elasticsearch,Nest" />

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

elasticsearch 如何使用NEST与ElasticSearch进行guid匹配,elasticsearch,nest,elasticsearch,Nest,我有一个ES文档,其中一个字段是guid 当我尝试进行匹配时,破折号在我的搜索中造成了严重破坏,我得到了一堆不相关的部分匹配 由于此字段是guid,因此始终需要精确匹配 在Kibana中,我可以将guid用引号括起来,得到精确的匹配;对于NEST,引号没有帮助。我也曾试图逃避这些冲击,但没有成功 我需要按原样存储guid,因为在某些情况下,我必须以完整的guid检索文档,因此无法删除其中的破折号 有没有办法用NEST标记该字段,以便在查询时只返回完全匹配的字段 编辑: 下面是我的回答: 我在

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

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

由于此字段是guid,因此始终需要精确匹配

在Kibana中,我可以将guid用引号括起来,得到精确的匹配;对于NEST,引号没有帮助。我也曾试图逃避这些冲击,但没有成功

我需要按原样存储guid,因为在某些情况下,我必须以完整的guid检索文档,因此无法删除其中的破折号

有没有办法用NEST标记该字段,以便在查询时只返回完全匹配的字段


编辑: 下面是我的回答:

  • 我在guid字段中添加了[Nest.Keyword]

  • 我这样问:

    var R = await _ElasticClient.SearchAsync<PictureObject>(Sr => Sr
        .Query(Q => Q.Term(Te => Te
        .Field(F => F.AlbumId)   <- the guid field
        .Value(IdString));  <- my value
    
    我找不到任何关于Name方法的文档,我所做的似乎与之类似,对于单个字段,因此我不知道它对我的案例有什么影响(如果有的话)

    从Kibana看,我的领域的地图是:

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

    Guid
    映射为,并使用术语级查询,如查找精确匹配。

    Guid
    映射为,并使用术语级查询,如查找精确匹配。

    我迟到了,但您可以使用匹配短语方法,如以下示例:

    await _elasticClient.SearchAsync<Employee>(
                    s => s.Index(IndexName).Query(
                        q => q.MatchPhrase(tq =>
                            tq.Field(x => x.DepartmentId).Query(dep.Id.ToString())))
    
    wait\u elasticClient.SearchAsync(
    s=>s.Index(IndexName).Query(
    q=>q.MatchPhrase(tq=>
    tq.Field(x=>x.DepartmentId.Query(dep.Id.ToString()))
    
    我参加聚会迟到了,但您可以使用以下示例中的匹配短语方法:

    await _elasticClient.SearchAsync<Employee>(
                    s => s.Index(IndexName).Query(
                        q => q.MatchPhrase(tq =>
                            tq.Field(x => x.DepartmentId).Query(dep.Id.ToString())))
    
    wait\u elasticClient.SearchAsync(
    s=>s.Index(IndexName).Query(
    q=>q.MatchPhrase(tq=>
    tq.Field(x=>x.DepartmentId.Query(dep.Id.ToString()))
    
    我已经用关键字编辑了问题和我所做的测试type@Thomas使用
    AlbumIb.keyword
    作为字段。你的意思是什么?这就是(F=>F.AlbumId)是吗?@Thomas您已经在POCO上编辑了属性映射,但这不会影响Elasticsearch中已经存在的映射,Elasticsearch已经将字段映射为带有
    关键字
    子字段的
    文本
    数据类型。对映射的大多数更改无法对已经存在的映射进行,因此您需要使用所需的映射创建一个新索引,然后将文档索引到其中。但是,正如@NishantSaini所指出的,您已经有了一个
    关键字
    子字段可供使用。要实现这一目标,您可以使用
    字段(F=>F.AlbumId.Suffix(“关键字”))
    使用
    术语
    查询。@Thomas我建议您阅读一下映射文档,因为我认为它在这里会有所帮助:我已经使用关键字编辑了这个问题type@Thomas使用
    AlbumIb.keyword
    作为字段。你的意思是什么?这就是(F=>F.AlbumId)是吗?@Thomas您已经在POCO上编辑了属性映射,但这不会影响Elasticsearch中已经存在的映射,Elasticsearch已经将字段映射为带有
    关键字
    子字段的
    文本
    数据类型。对映射的大多数更改无法对已经存在的映射进行,因此您需要使用所需的映射创建一个新索引,然后将文档索引到其中。但是,正如@NishantSaini所指出的,您已经有了一个
    关键字
    子字段可供使用。要实现这一目标,您可以使用
    字段(F=>F.AlbumId.Suffix(“关键字”))
    使用
    术语
    查询。@Thomas我建议您阅读一下映射文档,因为我认为它在这里会有所帮助: