使用elasticsearch搜索(包含)

时间:2018-02-14 10:36:56

标签: c# asp.net asp.net-mvc elasticsearch

我正在开发名为eBookRepository的ASP.NET MVC应用程序,其中包含在线书籍。 电子书有自己的标题,作者等。所以现在我正在尝试实施我的搜索机制。我必须使用Elasticsearch作为搜索引擎。

我在此代码中索引我的电子书并且有效。

Uri nodeLocation = new Uri("http://localhost:9200");
IConnectionPool connectionPool = new SniffingConnectionPool(new List<Uri> { nodeLocation });
ConnectionSettings settings = new ConnectionSettings(connectionPool).DefaultIndex("ebookrepository");
  esClient = new ElasticClient(settings);

foreach (var ebook in ebooksService.GetAll())
{
            IIndexResponse result = esClient.Index(ebook, i => i.Index("ebookrepository").Type("ebook").Id(ebook.ID));
}

此外,如果我按标题搜索我的电子书,只有当搜索文本与电子书的标题完全相同时,它才有效。代码就是这样:

var search = esClient.Search<Ebook>(s => s.Source(sf => sf.IncludeAll()).Query(q => q.Term(p1 => p1.Title, searchString)));

searchString变量是我在UI上的文本框中键入的字符串(文本)。

所以我找不到像上面这样的类似代码,它应该像C#中的 .contains 方法一样工作,我一直在寻找正确的解决方案,我想我应该使用.Match而不是.Term(.Term返回完全匹配的结果),但我找不到正确的解决方案。

虽然我在寻找正确的解决方案但很多问题和答案都是JSON格式的(我不擅长),我不想要这种格式,我需要.NET代码。

2 个答案:

答案 0 :(得分:0)

答案 1 :(得分:0)

使用此

var hits = _context.Search<Ebook>(search string, new SearchUrlParameters { Pretty = true });