ElasticSearch NEST DSL Query跨域查询



我正试图将以下ElasticSearch DSL查询转换为NEST,似乎有些不正确。这是我的DSL查询:

{  
"query": {
"multi_match": {
"query": "AJ",
"type": "cross_fields",            
"fields": ["name", "shortname", "shortname2", "number"],
"operator": "and"            
}
}
}

我有一个POCO类。我想得到的结果作为一个列表如下所示:

public class SearchDto
{
public Guid Id { get; set; }
public string Number { get; set; }
public string Name { get; set; }
public string ShortName2 { get; set; }
public string ShortName1 { get; set; }
}

因为它是一个跨字段查询,所以我创建了这样的字段:

Fields nameField = Infer.Field<SearchDto>(p => p.Name);
var shortName2 = Infer.Field<SearchDto>(p => p.ShortName2);
var shortName1 = Infer.Field<SearchDto>(p => p.ShortName1);
var number = Infer.Field<SearchDto>(p => p.Number);

这是我的NEST查询:

var searchRequest = new SearchRequest() {
Query = new MultiMatchQuery() {
Fields = nameField
.And(shortName2)
.And(shortName1)
.And(number),
Query = value,
Operator = Operator.And,
Type = TextQueryType.CrossFields
}
}

当我为我的searchRequest获得Json字符串时,它只打印"{}"使用以下语句:

var json = _client.RequestResponseSerializer.SerializeToString(searchRequest);

它还发布了"{}"请求正文

我还尝试了以下操作:

var response = _client.Search <List<SearchDto>> (s => s
.Size(500)
.Index("mysearchIndex")
.Query(q => q
.MultiMatch(m => m
.Type(TextQueryType.CrossFields)
.Fields(nameField)
.Fields(shortName1)
.Fields(shortName2)
.Fields(number)
.Operator(Operator.And)
.Query(value)
)
));

以上查询帖子仅"{"size": 500}";到我的elasticsearch端点

有人可以建议我做错了什么和/或建议更好的方法来处理我的查询使用NEST?由于某些原因,它甚至没有构建一个完整的查询。

嵌套查询是无条件的。如果输入被确定为null或空字符串,则该查询将从请求中省略。

在你的查询中是"value"为空或null,则生成的查询将为"{}"

如果你想搜索空值。然后需要将单个查询标记为逐字

单个查询可以标记为逐字生效;逐字查询将被序列化并在请求中发送给Elasticsearch,绕过NEST的无条件检查。

例子
var searchRequest = new SearchRequest()
{
Query = new MultiMatchQuery()
{
Fields = nameField
.And(shortName2)
.And(shortName1)
.And(number),
Query = "",
Operator = Operator.And,
Type = TextQueryType.CrossFields,
IsVerbatim=true   ---> note flag
}
};

对应查询

{"query":{"multi_match":{"fields":["name","shortName2","shortName1","number"],"operator":"and","query":"","type":"cross_fields"}}}

最新更新