ElasticSearch(NEST)按编号搜索

时间:2018-02-15 01:37:21

标签: elasticsearch nest

如果这是一个基本问题,我提前道歉 - 我对ElasticSearch非常陌生,并且需要接受很多。

目前,我正在尝试实施一个搜索所有索引列的基本关键字搜索,并使用特定字段Year获得一些奇怪的结果。我知道应该从结果中找到一定数量的文件,如果我搜索“2014”,他们都会成功回来。如果我只搜索“14”,则根本不会回来,如果我添加一个通配符(例如*14),那么我会得到一个结果,因为它没有使用{{1在搜索中,而是从Year字段中提取它。

我100%肯定这是我在查询结构上做错了,所以任何提示?顺便说一句,如果有人可以提供建议的地方来了解更多关于NEST的弹性,那将非常有帮助。他们的文档缺乏一点,你必须了解如何使用Elastic已经大部分时间才有意义,因为我没有,我就磕磕绊绊了。

以下是Description

的结构
ElasticListing

我与NEST一起使用的搜索结构是这样的,其中 public long Id { get; set; } public string Brand { get; set; } public string Manufacturer { get; set; } public string ActiveTags { get; set; } public string Description { get; set; } public int Year { get; set; } public string Location { get; set; } 将是“2014”(没有引号):

keyword

1 个答案:

答案 0 :(得分:4)

您要执行的操作是针对Elasticsearch中term字段的Year查询

var response = client.Search<ElasticListing>(s => s
    .AllTypes()
    .Query(query => query
        .Term(f => f.Year, 2014)
    )
    .Size(pageSize)
    .Explain()
);

查看文档的writing queries section

为了在Year字段上执行通配符查询,需要将其编入索引为keyword data typekeyword不会在索引时分析输入,这可能是什么我们希望将数值索引为&#34;字符串&#34;)。

默认情况下,NEST会将Year字段序列化为JSON中的数字,Elasticsearch会将此字段的映射推断为数字数据类型。即使使用NEST的automapping,NEST也会推断integer的{​​{1}}数据类型映射,以匹配属性的CLR类型Year。因此,我们需要覆盖此推断映射,以确保将Int32编入索引为Year数据类型。

这是一个完整的例子

keyword