【问题标题】:How to search based on field in azure search?如何在天蓝色搜索中基于字段进行搜索?
【发布时间】:2017-04-19 10:40:20
【问题描述】:

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

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

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

例如让我有两个字段 1)标题 2)销售日期

我必须编写代码来查找标题为“john”且销售日期

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

【问题讨论】:

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


    【解决方案1】:

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

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

    这会将文档过滤为仅在currentDate 之前具有soldDate 的文档,然后搜索过滤后的文档,以便在任何可搜索字段包含“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)。

    SearchParameters 的引用位于 docs.microsoft.com

    【讨论】:

    • 如果我有一个字段“模型”并且我需要搜索模型是否包含 100(Like 查询),我应该提供什么?
    • 我应该怎么做才能搜索到tilte="john" 和job="engineer" ?基本上两者都应该像查询
    • @hildasonica 你在别处问过这个问题,所以我会在那里回答:stackoverflow.com/questions/43510832/…
    • 你还没有回答。我在等你的回答
    • @hildasonica 另外,请尽量避免在 cmets 中提出不同的问题,因为这会使其他 Stack Overflow 用户更难找到答案。谢谢
    猜你喜欢
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-06
    • 2018-04-09
    • 1970-01-01
    相关资源
    最近更新 更多