首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Azure搜索-左侧匹配

Azure搜索-左侧匹配
EN

Stack Overflow用户
提问于 2018-02-27 01:23:18
回答 1查看 79关注 0票数 0

我需要实现的是左侧匹配。我使用的是查询类型full。请在下面找到我的模型和分析器:

代码语言:javascript
复制
public class Product
{
    [System.ComponentModel.DataAnnotations.Key]
    public string Id { get; set; }

    [IsSearchable, Analyzer("polish_analyzer")]
    public string Name { get; set; }
}

Analyzers = new[]
{
    new CustomAnalyzer()
    {
        Name="polish_analyzer",
        Tokenizer = "polish_tokenizer",
        TokenFilters = new TokenFilterName[] {"lowercase", "asciifolding" }
    }
},
Tokenizers = new[]
{
    new MicrosoftLanguageStemmingTokenizer()
    {
        Language = MicrosoftStemmingTokenizerLanguage.Polish,
        IsSearchTokenizer = true,
        Name = "polish_tokenizer"
    }
}

我已经将doucment { Id = "1",Name = "Łódka“}添加到基于Product类创建的索引中。

For搜索查询"Lod*“返回id为1的文档,但搜索查询"Łód*”未返回任何结果。我检查了"polish_analyzer“,对于文本"Łódka”,它返回令牌"lodka“。我的第二种方法是使用EdgeNGramTokenFilterV2,并将其添加到TokenFilters:

代码语言:javascript
复制
new EdgeNGramTokenFilterV2()
{
    MaxGram=300,
    MinGram=1,
    Name="token_edge"
}

使用EdgeNGramTokenFilterV2我不需要使用'*‘,左侧匹配对于"Łód“和"Lod”这两种情况都很有效,但我不知道这种解决方案是否有效,因为使用EdgeNGramTokenFilterV2标记过滤器的分析器会生成很多标记。

有人知道为什么左侧匹配在第一种情况下不起作用吗?或者如果第二种方法是有效的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-27 02:02:31

您的前缀查询不会返回任何结果,因为词法分析器不适用于前缀查询术语,您可以在此处了解更多信息:Exceptions to lexical analysis

如果您使用edge ngram标记过滤器,前缀匹配将会更加高效,并且您可以将其与波兰语词干标记赋予器结合使用。

由于两个字段在精确术语匹配和前缀匹配方面的处理方式不同,因此可以使用field-scoped queries对这两个字段进行搜索:

代码语言:javascript
复制
search=NameExact:Łódź NamePrefix:Łód&queryType=full
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48993852

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档