Tag:

如何使用NEST QueryString并转义特殊字符?

我正在使用NEST在我的应用程序中与Elasticsearch进行通信。 在这种情况下,用户输入他们的搜索词F5503904902 ,它返回正确的结果。 但是,如果他们搜索查询F5503904902-90190或F5503904902-90190_55F则结果不会返回。 我认为这是因为特殊字符,所以我试图逃避它们 – 但后来也没有结果。 我的查询是否正确,我做错了什么? 此外,我在转义的查询的末尾附加一个通配符,以匹配任何开放的结尾。 搜索方法: public IPagedSearchResult Find(ISearchQuery query) { ElasticClient client = ElasticClientManager.GetClient(_indexCluster, ElasticSearchIndexName.MyFileObjects); string queryString = EscapeSearchQuery(query.Query) + “*”; var searchResults = client.Search(s => s .From(query.Skip) .Size(query.Take) .QueryString(queryString)); IPagedSearchResult pagedSearchResult = new PagedSearchResult(); pagedSearchResult.Results = searchResults.Documents; pagedSearchResult.Skip = query.Skip; pagedSearchResult.Take = query.Take; pagedSearchResult.Total = Convert.ToInt32(searchResults.Total); return pagedSearchResult; } […]

Elasticsearch搜索查询以检索所有记录NEST

我在文件夹中的文档很少,我想检查此文件夹中的所有文档是否已编入索引。 为此,对于文件夹中的每个文档名称,我想为ES中索引的文档运行循环并进行比较。 所以我想要检索所有文件。 很少有其他可能重复的相同问题,例如检索(ElasticSearch)NEST查询中的所有记录并在 此处输入链接描述,但它们没有帮助我,因为文档已经从那时起改变了。(当前文档中没有关于扫描的内容) 我尝试使用client.search() 。 但根据文档,检索默认数量为10的结果。 我想在不提及记录大小的情况下获取所有记录? (因为索引的大小发生了变化) 或者是否可以先获取索引的大小,然后将此数字作为输入发送到大小以获取所有文档并循环?

如何使用C#更快地从Oracle向Elasticsearch表中插入400万条记录?

我有以下用C#编写的代码,但据此,将数据从Oracle数据库迁移到Elasticsearch需要4-5天。 我是以100个批次插入记录。还有其他方式可以更快地移动400万条记录(如果可能的话,可能在不到一天的时间内)吗? public static void Selection() { for(int i = 1; i < 4000000; i += 1000) { for(int j = i; j < (i+1000); j += 100) { OracleCommand cmd = new OracleCommand(BuildQuery(j), oracle_connection); OracleDataReader reader = cmd.ExecuteReader(); List list=CreateRecordList(reader); insert(list); } } } private static List CreateRecordList(OracleDataReader reader) { List l = new […]

弹性搜索5.x嵌套多个查询C#

我正在使用C#和那些nuget packeges; 我想在这里做什么, 我想在价格范围2000 – 3000中得到“白色”物品。这是一个简单的搜索api请求,对吗? 所以我为此编写了一个代码。 这里是; private static void Search(IElasticContext elasticContext, string indexName) { IQueryContainer termQueryContainer = new QueryContainer(); termQueryContainer.Term = new TermQuery { Field = new Field(“description”), Value = “white” }; IQueryContainer rangeQueryContainer = new QueryContainer(); rangeQueryContainer.Range = new NumericRangeQuery { Field = new Field(“price”), LessThanOrEqualTo = 3000, GreaterThanOrEqualTo = 2000 }; […]

多项搜索NEST C#

我想进行匹配多个值(值数组)的搜索,如下所示: var result1 = _client.Search(s => s .Fields(f => f.trip_id) .Query(q => q .Terms(t => t.arg1, value1)).Take(_allData)) .Documents.Select(d => d.arg2).ToArray(); var result2 = _client.Search(s => s .Query(q => q .Terms(t => t.arg3, result1)) .Take(_allData) ).Documents.Select(s => s.ar3).ToList(); 我能怎么做 ? 我在思考方面,但我不知道如何做到这一点。 现在唯一有效的方法是使用foreach迭代器,它不是真正有效的… 谢谢你的帮助。

为Elastic Search指定和使用带有C#NEST客户端的NGramTokenizer

更新以显示工作样本 我试图在ElasticSearch中对一组用户名进行部分搜索。 搜索周围已经指出我在nGram Tokenizer方向,但我nGram Tokenizer在适当的实现,并没有得到任何结果。 这是我正在处理的项目中删除的相关代码。 我尝试了不同的组合和搜索类型无济于事。 setup.cs var client = new ElasticClient(settings.ConnectionSettings); // (Try and) Setup the nGram tokenizer. var indexSettings = new IndexSettings(); var custonAnalyzer = new CustomAnalyzer(); customAnalyzer.Tokenizer = “mynGram”; customAnalyzer.Filter = new List { “lowercase” }; indexSettings.Analysis.Analyzers.Add(“mynGram”, customAnalyzer); indexSettings.Analysis.Tokenizers.Add(“mynGram”, new NGramTokenizer { MaxGram = 10, MinGram = 2 }); client.CreateIndex(settings.ConnectionSettings.DefaultIndex, indexSettings); […]

Elasticsearch和.NET

我们正在考虑从Solr / Solr.net切换到Elasticsearch。 我们从NEST开始。 我们在搜索索引中只有4个文档。 private static void Main(string[] args) { var node = new Uri(“http://localhost:9200”); var settings = new ConnectionSettings( node, “my-application”); var client = new ElasticClient(settings); var stopwatch = Stopwatch.StartNew(); var sr = client.Get(1); Console.WriteLine(stopwatch.ElapsedMilliseconds); } 上面的代码大约需要。 250ms,而与HttpClient和JsonSerializer相同的代码需要30-45ms。 只有4个文件,250毫秒是太多的时间。 可以在高流量新闻网站上使用NEST,还是推荐HttpClient + JsonSerializer组合? 搜索页面是2013年我们网站上访问量最大的页面。 提前致谢。

使用NEST C#Client搜索ElasticSearch

我开始四处寻找搜索引擎,经过一些阅读后我决定选择ElasticSearch(这太棒了:)),我的项目是在C#中,所以我四处寻找客户并开始使用NEST ,一切都很简单,但我是在搜索部分有点困惑。 我想搜索特定类型的 所有字段 ,我想出的是以下代码: elasticClient.Search(s => s.Query(q => q.QueryString(d => d.Query(queryString)))); 我看到很多字符串查询搜索已被弃用,并希望确保上述方法是正确的(上面没有标记为已弃用…)对于一个简单的任务也有点长,所以也许有人知道这样做的另一种方式。 谢谢

ElasticSearch Nest。 更好的术语聚合代码及其迭代

我想在给定时间段内获取唯一数字用户ID列表。 假设该字段为userId ,时间字段为startTime ,我成功获得如下结果; HashSet hashUserIdList= new HashSet(); // guarantees to store unique userIds. // Step 1. get unique number of userIds var total = client.Search(s => s .Query(q => q .DateRange(c => c.Field(p => p.startTime) .GreaterThan(FixedDate))) .Aggregations(a => a .Cardinality(“userId_cardinality”, c => c .Field(“userId”)))) .Aggs.Cardinality(“userId_cardinality”); int totalCount = (int)total.Value; // Step 2. get unique […]

ElasticSearch和NEST:如何清除索引中的所有文档?

我知道如何删除整个ElasticSearch索引 ,但是如何从索引中清除所有文档? 我的动机:我想要一个“ReIndex”方法来清除索引的全部内容,以便我可以重新加载所有文档。 ElasticSearch语法很有用。 NEST语法会更好。