0

我正在使用 azure 搜索,并且我有一个控制台应用程序,其代码如下,运行良好。

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

目前它正在搜索带有“智能”一词的文本。这是直截了当的,我需要的是表中有几个字段,我想根据 feild 进行搜索。

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

我必须编写代码来查找标题为“john”且销售日期<当前日期的项目。

我应该怎么做才能做到这一点?

4

1 回答 1

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);

这会将文档过滤为仅具有soldDatebefore的文档currentDate,然后搜索过滤后的文档,以便如果任何可搜索字段包含“john”,则文档匹配。您可以将其缩小到以下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)。

的参考资料SearchParametersdocs.microsoft.com上。

于 2017-04-19T19:16:05.393 回答