c# - ElasticSearch在多个字段上完全匹配

标签 c# linq elasticsearch nest

我是Elastic Search的新手,我试图在Elasticsearch索引中的对象的每个字段上获得完全匹配。例如,我有两个对象:

        {
            "_index": "sql",
            "_type": "_doc",
            "_id": "mpovsH",
            "_score": 1.0,
            "_source": {
                "entityId": 1,
                "user": "userfirst",
                "descr": "testfirst",
            }
        },
        {
            "_index": "sql",
            "_type": "_doc",
            "_id": "mpovsH",
            "_score": 1.0,
            "_source": {
                "entityId": 2,
                "user": "usersecond",
                "descr": "testsecond",
            }
        }
我想在对象的所有字段中搜索字符串“userfirst”,并仅获取第一个作为响应。我试过了:
                var searchResponse = client.SearchAsync<MyObject>(s => s
                .Source(sf => sf)
                .Query(q => q
                     .MultiMatch(a => a
                            .Query(queryValue)))).Result;
其中queryValue是“userfirst”,但我在结果中都得到了两个对象。我该如何更改?另外,如果可能的话,我不会写每个字段,因为我的对象要大得多。
编辑:我设法通过此查询仅获得一个结果:
                var searchResponse = client.SearchAsync<TendersElasticSearch>(s => s
                .Source(sf => sf)
                .Query(qn => qn
                .MatchPhrasePrefix(ma => ma
                .Field(x => x.User)
                .Query(queryValue)))).Result;
但是通过此查询,我只能在现场用户上获得结果。我想搜索每个对象的所有字段。有小费吗?

最佳答案

添加带有索引数据,映射,搜索查询和搜索结果的工作示例
索引映射:

{
  "mappings": {
    "properties": {
      "users": {
        "type": "nested" 
      }
    }
  }
}
索引数据:
{
    "users": [
        {
            "entityId": 1,
            "user": "userfirst",
            "descr": "testfirst"
        },
        {
            "entityId": 2,
            "user": "usersecond",
            "descr": "testsecond"
        }
    ]
}
搜索查询:
{
  "query": {
    "nested": {
      "path": "users",
      "query": {
        "bool": {
          "must": [
            { "match": { "users.user": "userfirst" }}
          ]
        }
      },
      "inner_hits":{}
    }
  }
}
使用多重匹配的搜索查询:
{
    "query": {
        "nested": {
            "path": "users",
            "query": {
                "bool": {
                    "must": [
                        {
                            "multi_match": {
                                "query": "userfirst",
                                "fields": [
                                    "users.user"
                                ]
                            }
                        }
                    ]
                }
            },
            "inner_hits": {}
        }
    }
}
搜索结果:
hits": [
                {
                  "_index": "stof_64061575",
                  "_type": "_doc",
                  "_id": "1",
                  "_nested": {
                    "field": "users",
                    "offset": 0
                  },
                  "_score": 0.6931471,
                  "_source": {
                    "entityId": 1,
                    "user": "userfirst",
                    "descr": "testfirst"
                  }
                }
              ]

关于c# - ElasticSearch在多个字段上完全匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64061575/

相关文章:

c# - 如何让 C# 类在其构造函数中实例化另一个类?

java - 图片上传 android Java + Asp.net (C#)

c# - 使用自定义分隔符解析一个巨大的文本文件(大约 2GB)

c# - 来自后台 worker 的文本框文本?

c# - 如何进行递归 LINQ 查询?

c# - LINQ:如何使用 IQueryable() 选择特定列

c# - 如何使用 Orderby 创建动态 linq 查询?

jdbc - Logstash-JDBC-MYSQL配置错误

ElasticSearch 跨整个数据的不同出现总数

elasticsearch - Elasticsearch:如何将多个过滤器应用于相同的值?