如何在 Azure AI/认知搜索 (Azure.search.documents) 中搜索多个字段中的不同文本?

问题描述 投票:0回答:1

因此,我希望字段 A、B 和 C 可以被搜索,这样如果我查找某个字符串“potato”,它将在字段 A、B 和 C 中查找该单词。

为此,我在 Azure 搜索中创建了一个索引,其中 A、B 和 C 是可检索和可搜索的。这部分按预期工作。

如果我也想在字段 D 中添加,但我希望它与 ABC 分开搜索/过滤怎么办?就像如果我正在寻找(不介意语法)

ABC = "potato" AND D = "brand 1" 
,我是否必须创建一个全新的索引来搜索 D?

我现在拥有的是一个索引,A、B、C 标记为可搜索,D 标记为可过滤。

在java代码中,我有一个使用该索引的searchClient。

SearchOptions searchOptions = new SearchOptions()
    .setSearchFields(
        "A",
        "B",
        "C"
    );
SearchPagedIterable searchResults = searchClient.search("potato", searchOptions, Context.NONE);

我不知道如何将字段 D 添加到上面的代码中,因为我不想在字段 D 中搜索“马铃薯”,也不想在字段 ABC 中搜索“品牌 1”。

如果我需要为每个单独的可搜索字段创建一个索引,这是可行的。我唯一的问题是我有很多领域。如果我需要一个索引来搜索所有这些,那就需要大量的索引和 java 代码。

理想情况下,有一种方法可以通过 SearchOptions 或 SearchClient 来分隔搜索,这样我就可以执行类似

"potato" AND D = "brand 1"

的操作

我还看到了这个非常相似但没有答案的问题:Azure Cognitive Search multiple fields with different text

java azure-cosmosdb azure-cognitive-search azure-java-tools
1个回答
0
投票

您可以尝试类似以下内容(未经测试的代码):

SearchOptions searchOptions = new SearchOptions()
    .setSearchFields(
        "A",
        "B",
        "C"
    )
    .setFilter("D eq 'brand 1'")
SearchPagedIterable searchResults = searchClient.search("potato", searchOptions, Context.NONE);

此代码应该做的是在字段 A、B、C 中搜索

potato
,并对字段 D 执行 OData 过滤器查询。

© www.soinside.com 2019 - 2024. All rights reserved.