【问题标题】:ElasticSearch NEST simple Terms query requires .keywordElasticSearch NEST 简单条款查询需要 .keyword
【发布时间】:2020-04-27 04:12:12
【问题描述】:

我正在尝试使用 NEST 7.5.1 (.NET Core 3.1) 检索具有特定名称(正是该名​​称)的单个文档:

var queryByTerm = client.Search<SomeDto>(s =>s.Query(q => q.Term(p => p.NameField, "example name")));

但它不返回任何文档(调用成功)。

正在发送的实际查询(如在客户端的ConnectionSettings 上的DebugInformation.EnableDebugMode 中所见):

{"query":{"term":{"nameField":{"value":"example name"}}}}

但它仅在我将 .keyword 添加到 nameField 时才有效(在 Kibana 中):

{"query":{"term":{"nameField.keyword":{"value":"example name"}}}}

我是否必须以某种方式强制 NEST 使用 nameField.keyword 而不是 nameField

【问题讨论】:

    标签: elasticsearch .net-core nest


    【解决方案1】:

    您可以使用.Suffix() 扩展方法来做到这一点。 Docs.

    var queryByTerm = client.Search<SomeDto>(s =>s.Query(q => q.Term(p => p.NameField.Suffix("keyword"), "example name")));
    

    希望对您有所帮助。

    【讨论】:

    • 谢谢!知道为什么我必须添加这个吗?
    • 您没有共享您的索引映射,但我假设字段 NameField 是在索引过程中正在分析的文本类型,当您想要搜索文档时它无法正常工作确切的值。默认情况下,elasticsearch 会为字符串值创建两个字段,一个是文本类型 (NameField),另一个是关键字类型 (NameField.keyword),它不会被分析并允许您查找确切的值。你可以阅读更多关于它的信息here
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-21
    相关资源
    最近更新 更多