elasticsearch 如何将snowball analyzer与NEST和ElasticSearch结合使用?,elasticsearch,nest,elasticsearch,Nest" /> elasticsearch 如何将snowball analyzer与NEST和ElasticSearch结合使用?,elasticsearch,nest,elasticsearch,Nest" />

elasticsearch 如何将snowball analyzer与NEST和ElasticSearch结合使用?

elasticsearch 如何将snowball analyzer与NEST和ElasticSearch结合使用?,elasticsearch,nest,elasticsearch,Nest,我不清楚:制作索引时是否必须使用雪球分析器 var Client = new ElasticClient(Settings); Client.CreateIndex("pictures", i => i .Settings(st => st .Analysis(a => a .Analyzers(ad => ad .Snowball("snowball", s => s.Language

我不清楚:制作索引时是否必须使用雪球分析器

var Client = new ElasticClient(Settings);
Client.CreateIndex("pictures", i => i
    .Settings(st => st
        .Analysis(a => a
            .Analyzers(ad => ad
                .Snowball("snowball", s => s.Language(SnowballLanguage.English))
            )
        )
    )
);
或者在搜索的时候

var queryResults = Client.Search<PictureIndex>(s => s
    .From(0).Size(10)
    .Query(q=>q
        .QueryString(qs=>qs
            .Analyzer("snowball")
            .Query("my test string")
         )
    )
);
var queryResults=Client.Search(s=>s
.从(0)开始。大小(10)
.Query(q=>q
.QueryString(qs=>qs
.Analyzer(“雪球”)
.Query(“我的测试字符串”)
)
)
);
此代码不会返回预期的结果

例如,如果我有:

  • 西红柿,还有
  • 西红柿
在我的索引中,如果我搜索西红柿,我希望找到2个结果,但事实并非如此

我正在尝试做一个只使用英语、不区分大小写、有词干的搜索,并添加模糊性以适应拼写错误

(作为奖励,我希望能够提交一份同义词列表)


编辑: 这是我的测试代码,但我想我误解了如何输入同义词。代码将不返回匹配项

public static class Program
{
    public class IndexData
    {
        public int Id { get; set; }
        public string Text { get; set; }
    }

    public static void Main()
    {
        var Settings = new ConnectionSettings(new Uri("http://elasticsearch:9200")).DefaultIndex("testindex");

        var A = new List<IndexData>
        {
            new IndexData { Id = 11, Text = "I like red, green and blue. But also cookies and candies" },
            new IndexData { Id = 12, Text = "There is a red cookie on the shelf" },
            new IndexData { Id = 13, Text = "Blue candies are my favorite" }
        };

        var Client = new ElasticClient(Settings);

        var D = Client.DeleteIndexAsync("testindex").Result;

        var U = Client.CreateIndex("testindex", i => i
            .Settings(s => s
                .Analysis(a => a
                    .CharFilters(cf => cf
                        .Mapping("my_char_filter", m => m
                            .Mappings("Blue => blue", "Red => red", "Green => green")
                        )
                    )
                    .TokenFilters(tf => tf
                        .Synonym("my_synonym", sf => sf
                            .Synonyms("red, blue")
                            .Synonyms("green, blue")

                        )
                    )
                    .Analyzers(an => an
                        .Custom("my_analyzer", ca => ca
                            .Tokenizer("standard")
                            .CharFilters("my_char_filter")
                            .Filters("lowercase", "stop", "my_synonym")
                        )
                    )
                )
            )
        );

        var R = Client.IndexDocument(A[0]);
        R = Client.IndexDocument(A[1]);
        R = Client.IndexDocument(A[2]);

        var Articles = Client.Search<IndexData>(s => s
            .From(0)
            .Size(1000)
            .Analyzer("my_analyzer")
            .Query(q => q.Fuzzy(fz => fz.Field("text").Value("blue").MaxExpansions(2)))
        );

        var Documents = Articles.Documents;
    }
}
公共静态类程序
{
公共类索引数据
{
公共int Id{get;set;}
公共字符串文本{get;set;}
}
公共静态void Main()
{
var设置=新连接设置(新Uri(“http://elasticsearch:9200默认索引(“测试索引”);
var A=新列表
{
new IndexData{Id=11,Text=“我喜欢红色、绿色和蓝色,但也喜欢饼干和糖果”,
new IndexData{Id=12,Text=“架子上有一个红色的cookie”},
新索引数据{Id=13,Text=“蓝色糖果是我的最爱”}
};
var客户端=新的ElasticClient(设置);
var D=Client.DeleteIndexAsync(“testindex”).Result;
var U=Client.CreateIndex(“testindex”,i=>i
.Settings(s=>s
.分析(a=>a
.CharFilters(cf=>cf
.Mapping(“我的字符过滤器”,m=>m
.Mappings(“蓝色=>蓝色”,“红色=>红色”,“绿色=>绿色”)
)
)
.TokenFilters(tf=>tf
.Synonym(“我的同义词”,sf=>sf
.同义词(“红色、蓝色”)
.同义词(“绿色,蓝色”)
)
)
.分析仪(an=>an
.Custom(“my_analyzer”,ca=>ca
.Tokenizer(“标准”)
.CharFilters(“我的字符过滤器”)
.Filters(“小写”、“停止”、“我的同义词”)
)
)
)
)
);
var R=Client.IndexDocument(A[0]);
R=客户索引文档(A[1]);
R=客户索引文档(A[2]);
var Articles=Client.Search(s=>s
.从(0)
.尺寸(1000)
.Analyzer(“my_Analyzer”)
.Query(q=>q.Fuzzy(fz=>fz.Field(“text”).Value(“blue”).MaxExpansions(2)))
);
var文件=条款文件;
}
}
我试图实现的是文本搜索,其中:

  • 我可能有一些小的拼写错误
  • 句柄复数:番茄=番茄
  • 我可以定义同义词(例如,这里我希望搜索“蓝色”时也会返回“红色”和“绿色”)
  • 首先获取具有最佳命中率的已排序匹配列表。我所说的最佳,是指涵盖更多搜索词的点击量

我必须承认,尽管查阅了这些文件,但我对整个系统的术语和流程感到非常困惑。另一个问题是,web上一半的示例没有编译,因为它看起来API在某个点上发生了更改。

查看分析中的客户端文档,因为我认为它回答了您的问题:如果您还有问题,请告诉我,我会看看是否可以回答。Hi-Russ,我已经添加了测试代码。如果你能指出我对API的误解,这样我就能理解我做错了什么,那就太好了。