azure - 天蓝色搜索,不匹配不过滤
问题描述
我正在使用 Azure 搜索在数据库中执行一些海关搜索。
我得到了一个具有这种结构的字段:
“东西”:“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
在本文之后,我更改了一些内容并进行了以下搜索:
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”的所有“-”,我试图按照这个问题使疼痛像“包含”,但我使用以下参数执行 POST 请求
{
"search": "*",
"filter": "search.ismatch('/.*08010000OU/.*','STUFF', 'full', 'all')",
"skip": "0",
"count": true
}
我试图在查询搜索开始时使用通配符,因为我仍然缺少一些信息。
解决方案
我相信您将无法使用 StandardAnalyzer 解决此问题。尝试为这个特定字段切换到 WhitespaceAnalyzer,它可能会与"05-05*"
推荐阅读
- app-store-connect - 开发者账号调查需要多长时间?
- c - 如何处理在gdb中包裹成多行的单行?
- javascript - How function unless works int the example in Chapter 5 Higher-Order Functions from the Eloquent JavaScript 3rd edition?
- python - 如何使工具栏中的工具按钮一次只选择一个?
- python - 查找通过从给定字符串中删除字母创建的单词
- python - 在 Python 中循环一个函数
- javascript - 比较两个对象的目的是什么?(相对于原语)
- c# - Unity3d - 通过墙壁组件评估封闭的房间
- go - 调试golang可执行文件时无法在vscode中获取局部变量
- node.js - Express js - 获得与预期不同的字符串长度