gpt4 book ai didi

c# - 无法从Elasticsearch获取带有NEST的任何文档

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

我使用Searchblox索引和搜索我的文件,该文件本身称为ES 2.x以完成工作。 Searchblox使用“mapping.json”文件在创建索引时初始化映射。这是该文件的link。正如“@Russ Cam”建议的here一样,我使用以下代码创建了自己的类(class)内容(就像他对“questions”索引和“Question”类所做的一样):

public class Content
{
public string type { get; set; }
public Fields fields { get; set; }
}

public class Fields
{
public Content1 content { get; set; }
public Autocomplete autocomplete { get; set; }
}

public class Content1
{
public string type { get; set; }
public string store { get; set; }
public string index { get; set; }
public string analyzer { get; set; }
public string include_in_all { get; set; }
public string boost { get; set; }
} //got this with paste special->json class

内容类中的这些字段(类型,存储等)来自上面所附的mapping.json文件。现在,当我(就像您向我展示的那样)执行以下代码:
var searchResponse = highLevelclient.Search<Content>(s => s.Query(q => q
.Match(m => m.Field(f => f.fields.content)
.Query("service")

作为对searchResponse变量的响应,我得到的是:
Valid NEST response built from a successful low level call on POST: /idx014/content/_search
Audit trail of this API call:
-HealthyResponse: Node: http://localhost:9200/ Took: 00:00:00.7180404
Request:
{"query":{"match":{"fields.content":{"query":"service"}}}}
Response:
{"took":1,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":0,"max_score":null,"hits":[]}}
And no documents in searchResponse.Documents. Contradictorily, when I search for the "service" query on Searchblox or make an API call to localhost:9200 with the Sense extension of Google Chrome, I get 2 documents. (the documents that I was looking for)

简而言之,我想要做的就是:
  • 获取所有文档(无条件)
  • 获取一个时间范围内并基于关键字的所有文档。例如“service”

  • 我究竟做错了什么?如果需要,我可以提供更多信息。.谢谢大家的详细回答。

    最佳答案

    您的C#POCO就您的映射而言是不正确的;您的文档类型是"sdoc",并且"properties"属性下的每个属性都是该文档类型上的一个字段;这些字段映射到C#POCO上的属性。

    以入门为例

    public class Document
    {
    [String(Name = "uid")]
    public string UId { get; set; }

    public string Content { get; set; }
    }

    默认情况下,NEST将使用驼峰大小写POCO属性名称,因此 "content"根据您的映射将正确区分大小写,但是,我们对 "uid"字段使用属性映射,以便对其进行命名以匹配该映射(我们可以在此处进行进一步设置并设置其他属性完全匹配映射的属性值 see the automapping documentation)。

    现在,要搜索文档,让我们创建连接设置和要使用的客户端
    void Main()
    {
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
    var connectionSettings = new ConnectionSettings(pool)
    .InferMappingFor<Document>(t => t
    // change the index name to the name of your index :)
    .IndexName("index-name")
    .TypeName("sdoc")
    .IdProperty(p => p.UId)
    );

    var client = new ElasticClient(connectionSettings);

    // do something with the response
    var searchResponse = client.Search<Document>(s => s
    .Query(q => q
    .Match(m => m
    .Field(f => f.Content)
    .Query("service")
    )
    )
    );
    }

    我们为客户端设置了 Document类型的一些推理规则,该规则将在与Elasticsearch交互时使用。上面的查询发出以下查询json
    {
    "query": {
    "match": {
    "content": {
    "query": "service"
    }
    }
    }
    }

    顺便说一句,我注意到映射包含一个 multi_field类型。 multi_field types were removed in Elasticsearch 1.0(仍然存在多个字段,但实际类型不存在),因此请确保您实际上在Searchblox上运行Elasticsearch 2.x,因为仅Elasticsearch 2.x支持NEST2.x。

    关于c# - 无法从Elasticsearch获取带有NEST的任何文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41156929/

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