在带有内部关键字字段的文本字段上使用术语过滤器的Elastic NEST

Nip*_*ipo 3 .net elasticsearch nest

我正在尝试对文本属性执行术语过滤器,以遵循Elastic 5.x上的新标准来访问其内部关键字字段...

我有一个这样的财产:

{
  "foo": {
    "type" "text",
    "fields": {
      "keyword": {
        "type": "keyword",
        "ignore_above": 256
      }
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

我正在运行以下代码以使用内部关键字字段进行过滤...

var searchResult = _elasticClient.Search<InvoiceResult>(x => x
 .Index("my_index")
 .Query(query => query
  .Term(term => term
   .Field(new Field("foo.keyword"))
   .Value("TEST")
  )
 )
);
Run Code Online (Sandbox Code Playgroud)

使用模型类有什么方法可以达到相同的结果?当我尝试下面的代码时,它永远不会使用关键字inner field。

var searchResult = _elasticClient.Search<InvoiceResult>(x => x
 .Index("my_index")
 .Query(query => query
  .Term(term => term
   .Field(field => field.Foo)
   .Value("TEST")
  )
 )
);
Run Code Online (Sandbox Code Playgroud)

干杯!

Rob*_*Rob 7

在这种情况下,NEST 具有非常方便的扩展方法。

var searchResult = _elasticClient.Search<InvoiceResult>(x => x
    .Index("my_index")
    .Query(query => query
        .Term(term => term
            .Field(field => field.Foo.Suffix("keyword"))
            .Value("TEST")
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

希望能有所帮助。