繁体   English   中英

ElasticSearch NEST返回特定字段

[英]ElasticSearch NEST return specific fields

我正在尝试编写一个只返回其中一个字段的查询。 现在我正在存储文件的filePath和文件的内容,在我的搜索中我想搜索内容,但只返回filePath。

我从这句话开始:

var searchResults = client.Search<File>(
        s => s.Query(q => q.Wildcard(w => w.Value("*" + genre + "*").OnField("fileContents"))).AllIndices().AllTypes());

哪个返回结果searchResults.Documents并将.Fields添加到它:

var searchResults = client.Search<File>(
        s => s.Query(q => q.Wildcard(w => w.Value("*" + genre + "*").OnField("fileContents"))).AllIndices().AllTypes().Fields(f=>f.filePath));

它在searchResults.Documents中没有任何内容,但它使用searchResults.Hits.Total正确显示了匹配数。

File类只是:

public class File
{
  public string filePath { get; set; }
  public string fileContents { get; set; }
}  

这会生成以下json请求:

{
"fields": [
"filePath"
],
"query": {
    "wildcard": {
     "fileContents": {
        "value": "*int*"
      }
    }
  }
}

在Sense中运行时返回结果,并在执行searchResults.Hits.Total给出命中数。

但是, searchResults.Document IEnumerable中没有记录。

是否有一种不同的方式我应该返回一个特定的领域?

使用“source”字段指定要撤回的字段。 以下是我的应用程序中仅返回一些字段的示例代码。

        var searchResults = ElasticClient.Search<AuthForReporting>(s => s
            .Size(gridSortData.PageSize)
            .From(gridSortData.PageIndex * gridSortData.PageSize)
            .Sort(sort)
            .Source(sr => sr
                .Include(fi => fi
                    .Add(f => f.AuthEventID)
                    .Add(f => f.AuthResult.AuthEventDate)
                    .Add(f => f.AuthInput.UID)
                    .Add(f => f.AuthResult.CodeID)
                    .Add(f => f.AuthResult.AuthenticationSuccessful)
                    .Add(f => f.AuthInput.UserName)
                    .Add(f => f.AuthResult.ProductID)
                    .Add(f => f.AuthResult.ProductName)
                    .Add(f => f.AuthInput.AuthType)
                    .Add(f => f.AuthResult.Address.City)
                    .Add(f => f.AuthResult.Address.State)
                    .Add(f => f.AuthResult.Address.CountryCode)
                    .Add(f => f.AuthResult.RulesFailed)
                )
            )
            .Query(query)
        );

然后,您可以通过结果中的“source”访问字段:

            var finalResult = from x in searchResults.Hits
                   select new AlertListRow
                          {
                              AlertCode = x.Source.AlertCode,
                              AlertDate = x.Source.AlertDate,
                              AlertID = x.Id,
                              AlertSummary = x.Source.Subject,
                              AlertMessage = x.Source.Body
                          };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM