我通过NEST c#使用ElasticSearch.我有很多关于人的信息
{
firstName: 'Frank',
lastName: 'Jones',
City: 'New York'
}
Run Code Online (Sandbox Code Playgroud)
我希望能够通过lastName对这个项目列表进行过滤和排序,并按长度排序,这样,名字中只有5个字符的人将位于结果集的开头,然后是10个字符的人.
所以对于一些伪代码,我想做类似的事情
list.wildcard("j*").sort(m => lastName.length)
我是ElasticSearch的新手,所以任何例子都会非常有用.
我有一个基本的Elasticsearch查询,看起来像这样
POST /fruit/_search
{"query":{"term":{"Name":"banana"}}}
Run Code Online (Sandbox Code Playgroud)
我得到了结果,当我在意义上运行时没有问题.
所以我尝试在elasticsearch.net中这样做
var requestBody = new { query = new { term = new { Name = "banana" } } };
var result = client.Search<string>("fruit", requestBody);
Run Code Online (Sandbox Code Playgroud)
我没有得到任何结果.如果我只有一个带有新{}的搜索主体,那么我会点击,但不会过滤.
我究竟做错了什么?
我正在寻找ElasticSearch嵌套查询,它将使用C#在其中包含空格的字符串上提供精确匹配.
例如 - 我想搜索像'XYZ Company Solutions'这样的词.我尝试了查询字符串查询但它给了我所有的记录,无论搜索结果如何.我也读了帖子,发现我们必须为该字段添加一些映射.我在球场上尝试了'Not_Analyzed'分析仪,但它仍无法正常工作.
这是我的C#代码
var indexDefinition = new RootObjectMapping
{
Properties = new Dictionary<PropertyNameMarker, IElasticType>(),
Name = elastic_newindexname
};
var notAnalyzedField = new StringMapping
{
Index = FieldIndexOption.NotAnalyzed
};
indexDefinition.Properties.Add("Name", notAnalyzedField);
objElasticClient.DeleteIndex(d => d.Index(elastic_newindexname));
var reindex = objElasticClient.Reindex<dynamic>(r => r.FromIndex(elastic_oldindexname).ToIndex(elastic_newindexname).Query(q => q.MatchAll()).Scroll("10s").CreateIndex(i => i.AddMapping<dynamic>(m => m.InitializeUsing(indexDefinition))));
ReindexObserver<dynamic> o = new ReindexObserver<dynamic>(onError: e => { });
reindex.Subscribe(o);**
**ISearchResponse<dynamic> ivals = objElasticClient.Search<dynamic>(s => s.Index(elastic_newindexname).AllTypes().Query(q => q.Term("Name","XYZ Company Solutions")));** //this gives 0 records
**ISearchResponse<dynamic> ivals1 = objElasticClient.Search<dynamic>(s => s.Index(elastic_newindexname).AllTypes().Query(q => …
Run Code Online (Sandbox Code Playgroud) 我希望有一个包含多个嵌套类的类,这样当我创建一个新的父类时,每个嵌套类的对象都会被创建,我可以全局引用每个嵌套类中的变量.
这是我目前的代码:
public class StockChecklist { public class qty1p1 { public string tag = "uniqueval23456"; public string value = ""; public string reference = ""; } public class qty1p2 { public string tag = "uniqueval3736"; public string value = ""; public string reference = ""; } public class qty2 { public string tag = "uniqueval97357"; public string value = ""; public string reference = ""; } public class qty3p1 { public string tag = "uniqueval88356"; public string value = ""; …
我正在使用Nest
连接到ElasticSearch并执行一些查询.到目前为止,我已经能够得到我要求的结果给出一个通配符查询,如下所示:
var searchResults = _client.Search<MyIndexable>(
body =>
body
.Index("someIndex")
.Query(
query =>
query.QueryString(
qs => qs.
OnFields(f => f.Title, f => f.Description)
.Query(searchTerm + "*"))));
Run Code Online (Sandbox Code Playgroud)
但是现在我需要为我的查询添加额外的条件以用于某个用例.
我需要的不仅是查询,
[searchTerm]*
还有两个匹配的其他字段:
- searchTerm +"*"
- field1 ="some string"
- field2 ="一些指导"
我确信必须有一种方法可以在弹性搜索(使用Nest
)中执行此操作,但我无法找到它.
我知道我可以在索引中添加两个额外的字段(如someIndex_field1_field2
),这对我来说绝对是一个选项,因为field1和field2是不错的分区(事实上,它可能是一个更好的选择,允许更好的分区)但我只是想看看是否有办法避免这样做,而是,如果有可能为查询添加多个条件.
有谁知道如何实现这一目标?
非常感谢,
我正在努力解决 ElasticSearch 7 中的一个新问题。尝试在 Nest 库 C# 中使用自动映射创建索引时,出现“总字段限制”错误。
await _elasticContext.GetClient().Indices.CreateAsync(indexName, c => c
.Map<DocumentWrapper>(m => m.AutoMap()));
Run Code Online (Sandbox Code Playgroud)
问题是如何将 集成index.mapping.total_fields.limit
到上面的查询中?或者替代解决方案(如果有的话)?
谢谢