微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

AzureSearch edgeNGram 搜索匹配太多文档

如何解决AzureSearch edgeNGram 搜索匹配太多文档

我正在尝试使用边缘 ngram 分析器分析的字段来实现前缀搜索。 但是,每当我进行搜索时,它都会返回相似的匹配项,但不包含搜索的字词。

以下查询

POST /indexes/resources/docs/search?api-version=2020-06-30

{
"queryType": "full","searchMode": "all","search": "short_text_prefix:7024032"
}

退货

{
"@odata.context": ".../indexes('resources')/$Metadata#docs(*)","@search.nextPageParameters": {
    "queryType": "full","search": "short_text_prefix:7024032","skip": 50
},"value": [
    {
    "@search.score": 4.669537,"short_text_prefix": "7024032   "
    },{
    "@search.score": 4.6333756,"short_text_prefix": "7024030   "
    },"short_text_prefix": "7024034   "
    },"short_text_prefix": "7024031   "
    },{
    "@search.score": 4.6319494,"short_text_prefix": "7024033   "
    },... omitted for brevity ...
],"@odata.nextLink": ".../indexes('resources')/docs/search.post.search?api-version=2020-06-30"
}

其中包括一堆几乎符合我的术语的文档。并将得分最高的“正确”文档排在最前面。

自定义分析器像这样标记“7024032”

"@odata.context": "/$Metadata#Microsoft.Azure.Search.V2020_06_30.AnalyzeResult","tokens": [
    {
    "token": "7","startOffset": 0,"endOffset": 7,"position": 0
    },{
    "token": "70",{
    "token": "702",{
    "token": "7024",{
    "token": "70240",{
    "token": "702403",{
    "token": "7024032","position": 0
    }
]
}

如何排除与词条不完全匹配的文档?

解决方法

在这种情况下,Ngram 不是正确的方法,因为前缀“702403”出现在所有这些文档中。如果您将最小长度指定为您要搜索的术语的长度,则可以使用它。

这是一个例子:

令牌长度:3

示例内容:

234

1234

2345

3456

001234

99234345

搜索“234”

它将返回项目 1 (234)、2 (1234)、3 (2345)、4 (001234) 和 5 (99234345)

另一种选择,如果您 100% 以您呈现的方式存储内容,您可以使用正则表达式来检索您想要的方式:

/.*7024032\s+/

enter image description here

,

我发现了问题:

我使用“analyzer”属性创建了该字段,该属性指的是我的自定义分析器(“edge_nGram_analyzer”)。设置此字段意味着字符串在索引和搜索时都被标记。因此,搜索“7024032”意味着我正在搜索所有标记,根据 egde n-gram 分析器进行拆分:“7”、“70”、“702”、“7024”、“7024032”、“70240”、“702403” ","7024032"

可以使用 indexAnalyzer 和 searchAnalyzer 属性来分别处理索引标记和搜索标记。当我单独使用它们时:

{ "indexAnalyzer": "edge_nGram_analyzer","searchAnalyzer": "whitespace" }

一切都按预期进行。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。