首页 > 解决方案 > 天蓝色搜索,不匹配不过滤

问题描述

我正在使用 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
}

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

标签: azurelucenelucene.netazure-cognitive-searchazure-search-.net-sdk

解决方案


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


推荐阅读