【问题标题】:Azure search query to filter JSON values用于筛选 JSON 值的 Azure 搜索查询
【发布时间】:2019-09-26 11:49:39
【问题描述】:

我正在尝试构建 Azure 搜索查询。 Azure 搜索索引中的字段类型为 collection(Edm.String)。这就是我要过滤的 JSON 数据的样子:["A","B"]。

当我尝试使用“A”中的查询字母进行过滤时,它会带来所有包含“A”的条目。但是,当我尝试在我的代码中构建相同的查询时,例如“字母表中的‘A’”,它会抛出一个异常说明:

“无效的表达式:表达式包含不受支持的 OData 语言功能。请修改您的查询并重试。
参数名称:$filter"。

还有其他 Azure 查询可用于过滤我的 JSON 数据吗?

注意:我不能使用 eq,因为我的字段是多值的,而 eq 只能处理单个值。

【问题讨论】:

  • 那么您是否想要组成一个过滤器表达式,它能够过滤具有多个值的集合的结果,例如 ["A","B"] 而不仅仅是 ["A"] ?
  • 是的。我提交的是一个 JSON 集合,其值类似于 ["A"] 、["A","B"]、["C","A","E"]。我需要一个查询来从这三个中获取 A。

标签: azure azure-cognitive-search


【解决方案1】:

如果你想过滤一个需要包含多个值的集合,即你想查询集合中包含“A”和“B”的所有结果,试试下面的过滤表达式:

假设您的收藏字段名称是“字母”

$filter=alphabet/any(s: s eq 'A') and alphabet/any(s: s eq 'B')

【讨论】:

  • 感谢您的回复。但我需要与字符串集合进行比较。换句话说,我想查询“A”并获取其中包含 A 的所有结果。就像在 ["A"] 、 ["A","B","C"] 等中将 'A' 与我的 JSON 集合进行比较。目前 eq 无法查询多值字段。
  • 我明白了,假设您的索引中有 3 个文档,并且集合数据是:["A","B","C"] ["B","B"," C"] ["C","A","C"] 并且集合名称文件名为“alphabet”,如果要过滤集合包含“A”的结果,请尝试以下表达式: $filter=字母表/任何(s: s eq 'A')
【解决方案2】:

解决方案是使用 search.ismatch 查询,例如 search.ismatch('A,B','Alphabet','simple','any')。所以结果将包含所有具有 A 或 B 或两者的记录的搜索结果。

参考:https://docs.microsoft.com/en-us/azure/search/query-odata-filter-orderby-syntax

【讨论】:

    猜你喜欢
    • 2021-06-01
    • 2021-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-24
    • 2020-06-14
    • 1970-01-01
    • 2020-01-02
    相关资源
    最近更新 更多