如何在天蓝色搜索中基于字段进行搜索?

时间:2017-04-19 10:40:21

标签: c# asp.net-mvc azure-search azure-search-.net-sdk

我正在使用天蓝色搜索,我有一个控制台应用程序,其代码如下所示,工作正常。

        DocumentSearchResult<Hotel> results;
        Console.WriteLine("Search started\n"); 
        results = indexClient.Documents.Search<Hotel>("smart", new SearchParameters { Top=5 });
        WriteDocuments(results);

目前正在搜索带有&#34; smart&#34;字样的文字。这是直接的,我需要的是我在表中有几个字段,我想根据字段进行搜索。

例如让我有两个字段 1)标题 2)SoldDate

我必须编写代码来查找具有标题&#39; john&#39;其销售日期&lt;当前日期。

我该怎么做才能实现这个目标?

1 个答案:

答案 0 :(得分:2)

您可以通过搜索和过滤器实现您想要的效果:

// Approach #1
string currentDate = DateTime.UtcNow.ToString("O");
var parameters = new SearchParameters()
{
    Filter = "soldDate lt " + currentDate,
    Top = 5
}

results = indexClient.Documents.Search<Hotel>("john", parameters);

这会将文档过滤到只有soldDate之前currentDate的文档,然后搜索过滤后的文档,以便文档匹配,如果任何可搜索的字段包含&#34; john&#34; 。您可以将此范围缩小到title字段,如下所示:

// Approach #2
string currentDate = DateTime.UtcNow.ToString("O");
var parameters = new SearchParameters()
{
    Filter = "soldDate lt " + currentDate,
    SearchFields = new[] { "title" },
    Top = 5
}

results = indexClient.Documents.Search<Hotel>("john", parameters);

或者像这样:

// Approach #3
string currentDate = DateTime.UtcNow.ToString("O");
var parameters = new SearchParameters()
{
    Filter = "soldDate lt " + currentDate,
    QueryType = QueryType.Full,
    Top = 5
}

results = indexClient.Documents.Search<Hotel>("title:john", parameters);

您使用哪种方式取决于您是希望所有搜索字词都限于特定字段集(方法#2),还是希望特定字词与特定字段匹配(方法#3)。

SearchParameters的引用位于docs.microsoft.com