繁体   English   中英

Elasticsearch NEST

[英]Elasticsearch NEST

目前,我开始对c#“ NEST”使用Elasticsearch包装器,并且在编写查询以检查部分相似性(例如“ book”和“ books”中的相似性)的查询时遇到了一些麻烦,因此当我有一个包含“ books”的文档时,如果我搜索“书”,则找不到它:这是我的代码:

var articles = client.Search<ProductResult>(s => s
        .From(0)
        .Size(1000)
        .MatchAll()
        .Query(q => q.QueryString(d => d
        .Query(query)
            )));

尝试使用像snowball这样的词干分析器来分析您的字段,这将尽力将单词简化为词根形式。 例如, booksbooking => bookjumpsjumping => jump 等等...它背后的算法并不完美,会以不规则的单词/复数形式出现,但是在大多数情况下,它的效果很好(在大多数欧洲语言中)。

最初创建索引时,或使用更新映射API在现有索引上可以应用不同的分析器。 无论哪种方式,您都必须重新索引我们的文档以应用新的分析。

使用NEST创建索引示例:

client.CreateIndex("yourindex", c => c
    ...
    .AddMapping<YourType>(m => m
        .MapFromAttributes()
        .Properties(ps => ps
            .String(s => s.Name("fieldname").Analyzer("snowball"))
            ...
        )
    )   
);

更新映射示例:

client.Map<YourType>(m => m
    .MapFromAttributes()
    .Index("yourindex")
    .Properties(ps => ps
        .String(s => s.Name("fieldname").Analyzer("snowball"))
        ...
    )
);

这是《权威指南》中有关算法词干的一些非常好的信息。

你也可以使用Fuzzy

var articles = client.Search<ProductResult>(s => s
            .From(0)
            .Size(1000)
            .Query(q => q.(d => d
                .Fuzzy(fz => fz.OnField("field").Value("book").MaxExpansions(2))
                ));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM