【问题标题】:AZURE SEARCH, ismatch not filtering天蓝色搜索,不匹配不过滤
【发布时间】:2020-03-27 17:25:07
【问题描述】:

我正在使用 Azure 搜索在数据库中执行一些海关搜索。

我得到了一个具有这种结构的字段:

“STUFF”:“05-05-16-00|”

但我在创建过滤器时遇到了麻烦,因为我可能不会拥有构建此结构的所有数字。这完全取决于最终用户将输入的内容。所以我需要一个通配符来填充缺失的数字,就像这样

“05-05-??-??” -> 管道很重要,因为这个字段里面可以有多个代码。

现在我需要捕获以 05-05 开头的所有可能元素,例如:05-05-11-01

我以为我应该使用 search.ismatch() 函数,但它不起作用。

这里有一些代码:

search.ismatch('05-05-??-??','STUFF');

结果是:

"STUFF": "02-02-16-00|",
"STUFF": "02-02-14-00|",

这快把我逼疯了,因为我不知道为什么会出现这个结果。

知道我在“过滤器”中使用此代码对 Azure 搜索 API 执行 POST 请求可能很重要

也许我应该转义这个特殊字符,比如 - 和 ?像这样

search.ismatch('05\\-05\\-\\?\\?\\-\\?\\?','STUFF')

但结果是一样的。

有人可以帮帮我吗?

编辑 1

Article 之后,我更改了一些内容并进行以下搜索:

search.ismatch('\"05-00*\"','STUFF','simple', 'all')

我开始得到一些结果,但现在这是我的结果:

"STUFF": "06-05-02-00|", //WRONG
"STUFF": "05-02-05-01|", //RIGHT
"STUFF": "05-02-02-07|", //RIGHT

由于某种原因,它正在恢复正确的结构,而不是文本前面的结构。

编辑 2

我进行了一些更改并更改了关键字“OU”的所有“-”,我正在尝试遵循此question 以使疼痛像“包含”,但我使用以下参数执行 POST 请求

{
    "search": "*",
    "filter": "search.ismatch('/.*08010000OU/.*','STUFF', 'full', 'all')",
    "skip": "0",
    "count": true
}

我试图在查询搜索的开头使用通配符,因为我仍然缺少一些信息。

【问题讨论】:

  • stuff 和 05-05* 是否存储在同一个字段中?您能提供一个索引定义示例吗?
  • @ThiagoCustodio Stuff 是字段名,de struture 是里面的内容,像这样: "STUFF": "05-05-16-00|"
  • EDIT2:乞求不支持通配符。

标签: azure lucene lucene.net azure-cognitive-search azure-search-.net-sdk


【解决方案1】:

我相信您无法使用 StandardAnalyzer 解决此问题。尝试为这个特定字段切换到 WhitespaceAnalyzer,它可能适用于 "05-05*"

【讨论】:

  • 这是我试图隐藏的哈哈,我创建了一个没有“-”的非常小的新索引,它可以工作。
  • 让我问你最后一件事:请检查编辑 2,valeu amigo (brasileiro né haha​​)
猜你喜欢
  • 2017-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多