gpt4 book ai didi

elasticsearch - NEST elasticsearch.NET搜索查​​询未返回结果(第2部分)

转载 作者:行者123 更新时间:2023-12-03 02:02:46 25 4
gpt4 key购买 nike

我将对象初始化器语法与NEST一起使用以形成搜索查询。当我将第二个pdfQuery包含在逻辑OR运算符中时,没有任何结果。如果排除它,我会得到结果。

QueryContainer titleQuery = new MatchQuery
{
Field = Property.Path<ElasticBook>(p => p.Title),
Query = query,
Boost = 50,
Slop = 2,
MinimumShouldMatch = "55%"
};

QueryContainer pdfQuery = new MatchQuery
{
Field = Property.Path<ElasticBook>(p => p.Pdf),
Query = query,
CutoffFrequency = 0.001
};

var result = _client.Search<ElasticBook>(new SearchRequest("bookswithstop", "en")
{
From = 0,
Size = 10,
Query = titleQuery || pdfQuery,
Timeout = "20000",
Fields = new []
{
Property.Path<ElasticBook>(p => p.Title)
}
});

如果我调试并检查结果var,则会复制请求属性之一的值以获取:
{
"timeout": "20000",
"from": 0,
"size": 10,
"fields": [
"title"
],
"query": {
"bool": {
"should": [
{
"match": {
"title": {
"query": "Proper Guide To Excel 2010",
"slop": 2,
"boost": 50.0,
"minimum_should_match": "55%"
}
}
},
{
"match": {
"pdf": {
"query": "Proper Guide To Excel 2010",
"cutoff_frequency": 0.001
}
}
}
]
}
}
}

问题是,如果我将查询复制到有意义的位置,它将返回大约100个结果(尽管很慢)。我检查了 header 信息,从NEST来看似乎也是正确的:
ConnectionStatus = {StatusCode: 200, 
Method: POST,
Url: http://elasticsearch-blablablamrfreeman/bookswithstop/en/_search,
Request: {
"timeout": "20000",
"from": 0,
"size": 10,
"fields": [
"title"
],
"query": {
"bool": {
"shoul...

pdf字段使用 Elasticsearch 附件插件(位于@ https://github.com/elastic/elasticsearch-mapper-attachments),我以前收到过 Newtonsoft.JSON system.outofmemoryexceptions的提示(但由于某种原因现在没有)。

因此,我唯一的建议是通过我的查询和NEST可能存在一些序列化问题?如果是这种情况,我不确定为什么它会成功执行200条代码并在Documents属性中提供0个文档

谁能给我解释一下如何解决这个问题?显然,它不喜欢我的第二个搜索查询(pdfQuery),但我不确定为什么-生成的JSON请求语​​法似乎也正确!

最佳答案

我认为这是造成问题的原因

Fields = new []
{
Property.Path<ElasticBook>(p => p.Title)
}

当您使用 Fields选项时,elasticsearch不会返回 _source字段,因此您无法通过 result.Documents访问结果。相反,您必须使用 result.FieldSelections,这是非常不愉快的。

如果您只想从elasticsearch返回特定字段并且仍然能够使用 result.Documents,则可以利用 source includes / excludes。使用NEST,您可以执行以下操作:
var searchResponse = client.Search<Document>(s => s
.Source(source => source.Include(f => f.Number))
.Query(q => q.MatchAll()));

希望这对您有所帮助。

关于elasticsearch - NEST elasticsearch.NET搜索查​​询未返回结果(第2部分),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30354226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com