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

ElasticSearch NEST多重匹配返回所有结果

萧煜
2023-03-14

我有一个C#代码,使用multi-matchElastic搜索类型,它将匹配两个字段。我用的是NEST软件包。

var response = await _elasticClient.SearchAsync<FileDocument>(
     s => s.Query(q => q.MultiMatch(c => c
     .Fields(f => f.Field(p => p.FileName).Field(query))
     .Fields(f => f.Field(p => p.Metadata).Field(query))
     )));

问题是,无论我传入什么文本,它都会返回所有结果。我错过了什么?

共有2个答案

琴正初
2023-03-14

添加后解决。查询(Query)

var response = await _elasticClient.SearchAsync<FileDocument>(
                 s => s.Query(q => q.MultiMatch(c => c
                 .Fields(f => f.Field(p => p.FileName).Field(p=>p.Metadata))
                 .Query(query)
                 ))
                 );

参考-https://www.elastic.co/guide/en/elasticsearch/client/net-api/current/multi-match-usage.html

轩辕欣可
2023-03-14

为了有效地调试这些类型的问题,您需要检查发送到Elasticsearch的HTTP请求,最终您的查询生成器将转换为搜索JSON,并针对Elasticsearch执行。

我不知道nest,但已经为Java代码编写了答案,该代码以JSON格式打印Elasticsearch查询。

虽然我的猜测是,您没有发送正确的HTTP方法,该方法应该是POST,并且您可能会使用GET发送它,这会导致ES忽略您的搜索查询并返回所有文档。

 类似资料:
  • 我有一个接口,它提供了一个方法,返回一个,其中包含一个

  • 我正在创建,比如说,15个Callable任务,并提交它们: 然后我收集15个MyResult对象: 问题是:我没有从get()方法获得所有15个MyResult对象,而是有时获得不到15个对象。有时12有时10有时甚至更少,有时全部15。 我的印象是,方法是一个阻塞调用,将等待所有15个线程返回各自的结果,但看起来我错过了其中的一些线程并继续前进。我做错了什么?我是否未正确收集结果/等待结果?当

  • 我从sql检索数据并存储在列表中。然后我将它转换为GenericEntity并尝试使用response.Entity().build()返回它;但它只返回第一个项目。 我确认清单上包含了所有的项目。所以问题应该是列表到实体的转换和/或响应的返回。我尝试循环响应部分,但它没有工作。 List List=new arraylist<>();字符串stmt=“”;PreparedStatement PS

  • 问题内容: 我有以下代码: … 循环显示“ et al”,但对m.matches()的调用返回false。而且m.groupCount()返回2。有关发生了什么的任何帮助? 问题答案: 但是对m.matches()的调用返回false。 这是因为要求您将完整的输入与正则表达式匹配。 从Javadoc: 布尔布尔Match() 尝试根据图案匹配整个区域。如果匹配成功,则可以通过开始,结束和分组方法获

  • 我正在寻找与此非常相似的东西,只是我想要所有的匹配,而不仅仅是第一个。在javascript中,您可以添加一个“全局”修饰符来获得所有匹配项的列表,在Java中是否也有类似的可能?

  • 我尝试进入调试模式,它似乎无法提取字符串的特定部分。我做错了什么?我的regex错了吗?它似乎与我尝试过的所有在线regex构建器/测试器相匹配。