如何在每个字段的基础上为嵌套设置弹性搜索的相似性(how do i set similarity in nest for elasticsearch on a per field basis)

编程入门 行业动态 更新时间:2024-10-26 03:36:15
如何在每个字段的基础上为嵌套设置弹性搜索的相似性(how do i set similarity in nest for elasticsearch on a per field basis)

我无法使用Nest以编程方式在elasticsearch中的字段上设置相似性。

这是我如何设置索引的一个例子。 它在多场映射中,我想设置相似性,所以我可以尝试BM25相似性之类的东西......

(参见下面的道具>多字段部分)...

var createInd = client.CreateIndex("myindex", i => { i .Analysis(a => a.Analyzers(an => an .Add("nameAnalyzer", nameAnalyzer) ) .AddMapping<SearchData>(m => m .MapFromAttributes() .Properties(props => { props .MultiField(mf => mf //title .Name(s => s.Title) .Fields(f => f .String(s => s.Name(o => o.Title).Analyzer("nameAnalyzer")) .String(s => s.Name(o => o.Title.Suffix("raw")).Index(FieldIndexOption.not_analyzed)) ) ); ...

i have not been able to 'programmatically' set the similarity on a field in elasticsearch using Nest.

here's an example of how i set up my index. it's within the multifield mapping where i'd like to set the similarity so i can experiment with things like BM25 similarity...

(see the props > multifield section below)...

var createInd = client.CreateIndex("myindex", i => { i .Analysis(a => a.Analyzers(an => an .Add("nameAnalyzer", nameAnalyzer) ) .AddMapping<SearchData>(m => m .MapFromAttributes() .Properties(props => { props .MultiField(mf => mf //title .Name(s => s.Title) .Fields(f => f .String(s => s.Name(o => o.Title).Analyzer("nameAnalyzer")) .String(s => s.Name(o => o.Title.Suffix("raw")).Index(FieldIndexOption.not_analyzed)) ) ); ...

最满意答案

最近, 这个提交可以在字符串字段上设置相似性。 你现在可以这样做:

.String(s => s.Name(o => o.Title).Similarity("my_similarity")
 

这是假设您已经将相似性添加到索引中。 NEST目前缺乏实际配置相似性的灵活性。 现在你必须使用CustomSimilaritySettings类。 例如:

var bm25 = new CustomSimilaritySettings("my_similarity", "BM25");
bm25.SimilarityParameters.Add("k1", "2.0");
bm25.SimilarityParameters.Add("b", "0.75");

var settings = new IndexSettings();
settings.Similarity = new SimilaritySettings();
settings.Similarity.CustomSimilarities.Add(bm25);

client.CreateIndex("myindex", c => c.InitializeUsing(settings));
 

在创建索引时能够通过流畅的API执行此操作会很高兴。 我正在考虑在1.0RC发布之前为此发送PR。

It was just recently made possible with this commit to set the similarity on a string field. You can now do this:

.String(s => s.Name(o => o.Title).Similarity("my_similarity")
 

This is assumming you already have the similarity added to your index. NEST is lacking a bit of flexibility at the moment for actually configuring similarities. Right now you have to use the CustomSimilaritySettings class. For example:

var bm25 = new CustomSimilaritySettings("my_similarity", "BM25");
bm25.SimilarityParameters.Add("k1", "2.0");
bm25.SimilarityParameters.Add("b", "0.75");

var settings = new IndexSettings();
settings.Similarity = new SimilaritySettings();
settings.Similarity.CustomSimilarities.Add(bm25);

client.CreateIndex("myindex", c => c.InitializeUsing(settings));
 

It would be nice to be able to do this via the fluent API when creating an index. I am considering sending a PR for this before the 1.0RC release.

更多推荐

本文发布于:2023-08-02 21:31:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1381473.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:相似性   嵌套   字段   上为   弹性

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!