【发布时间】: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