Elasticsearch NEST 搜索查询只有数字

Posted

技术标签:

【中文标题】Elasticsearch NEST 搜索查询只有数字【英文标题】:Elasticsearch NEST search query is only numbers 【发布时间】:2021-12-01 21:08:13 【问题描述】:

我在 ElasticSearch 中搜索时遇到问题,并且查询只是数字。 我使用的代码是

 var result = await _elasticClient
                .SearchAsync<MyDocument>(search =>
                    search.Index("index")
                    .From(offset)
                    .Size(size)
                    .Query(q =>
                        q.Bool(b => b
                           .Should(should => should
                               .MultiMatch(mm =>
                                    mm.Query(query)
                                   .Fields(f => f
                                       .Field("stringNumber", boost: 3)
                                       .Field("a", boost: 2)
                                       .Field("b", boost: 1)
                                   ).Lenient(true)
                                )
                           )             
                          .Should(should => should
                               .MultiMatch(mm =>
                                    mm.Query(query)
                                   .Fields(f => f
                                       .Field("a", boost: 2)
                                   ).Fuzziness(Fuzziness.Ratio(1)
                                )
                           )                            
                        )
                    )
                ); 

这给了我一个空的结果,但是当我进入 kibana 并输入类似的东西时,我得到了一个结果。 这是 Kibana 中的查询

"size": 20, 
  "query": 
    "bool": 
      "should": [
        "multi_match": 
          "query": "1234",
          "fields": ["stringNumber", "a^2", "b^1"]
        
      ]
    
  

我希望有人能看到我的错误。 C# 代码给出了空,但 Kibana 给出了文档的结果。

更新修复

 var result = await _elasticClient
                .SearchAsync<MyDocument>(search =>
                    search.Index("index")
                    .From(offset)
                    .Size(size)
                    .Query(q =>
                        q.Bool(b => b
                           .Should(should => should
                               .MultiMatch(mm =>
                                    mm.Query(query)
                                   .Fields(f => f
                                       .Field("stringNumber", boost: 3)
                                       .Field("a", boost: 2)
                                       .Field("b", boost: 1)
                                   ).Lenient(true)
                                )
                           ,             
                          should2 => should2
                               .MultiMatch(mm =>
                                    mm.Query(query)
                                   .Fields(f => f
                                       .Field("a", boost: 2)
                                   ).Fuzziness(Fuzziness.Ratio(1)
                                )
                           )                            
                        )
                    )
                ); 

【问题讨论】:

在您的 elasticClient 上启用调试模式并在执行查询后检查 result.DebugInformation。它将显示生成并执行的查询。 谢谢,很高兴知道! 好吧,我没有给出完整的代码。我用经验教训更新问题! 【参考方案1】:

在调试的帮助下找到了答案,修复存在问题。

【讨论】:

以上是关于Elasticsearch NEST 搜索查询只有数字的主要内容,如果未能解决你的问题,请参考以下文章

NEST 搜索整个文档 C# Elasticsearch

NEST - 编写查询

NEST 中的模拟 Elasticsearch 客户端存在异步搜索方法问题

NEST/Elasticsearch.Net 发送原始JSON请求(Post数据)

ElasticSearch NEST 搜索

为啥使用 C#/ElasticSearch 进行此 NEST 通配符搜索没有返回任何文档?