[英]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
这样的词干分析器来分析您的字段,这将尽力将单词简化为词根形式。 例如, books
和booking
=> book
, jumps
和jumping
=> 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.