因此,我希望字段 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
您可以尝试类似以下内容(未经测试的代码):
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 过滤器查询。