当前位置: 首页 > 面试题库 >

ElasticSearch 5.x上下文建议器NEST .Net

冀阳文
2023-03-14
问题内容

我正在尝试在ElasticSearch 5.1.2上的Nest 5.0中创建带有上下文建议器的索引。

目前,我可以创建映射:

elasticClient.MapAsync<EO_CategoryAutocomplete>(m => m
                .Properties(p => p
                    .Completion(c => c
                        .Contexts(ctx => ctx
                            .Category(csug => csug
                                .Name("lang")
                                .Path("l")
                            )
                            .Category(csug => csug
                                .Name("type")
                                .Path("t")
                            )
                            .Category(csug => csug
                                .Name("home")
                                .Path("h")
                            )
                        )
                        .Name(n => n.Suggest)
                    )
                )
            );

但在POCO类我不知道对象类型必须是什么 本稿 标明物业 ?????

public class EO_CategoryAutocomplete
{
    public string Id { get; set; }
    public ????? Suggest { get; set; }
}

public class EO_CategoryAC
{
    public int Id { get; set; }
    public string Name { get; set; }
}

在NEST 5.0中, CompletionField 属性已被删除(这是在Elasticsearch 2.X上执行上下文提示的方法)

请,任何人都可以提供有关该方法的示例吗?

该文档全部关于查询。推荐人NEST

谢谢。


问题答案:

完成和上下文建议程序可以_source在5.x +的响应中返回,因此不再需要有效负载。因此,NEST
5.x中的类型现在是CompletionField,而不是CompletionField<TPayload>NEST
2.x中TPayload的有效负载类型。

这是NEST 5.x的示例,可帮助您启动和运行

public class EO_CategoryAutocomplete
{
    public string Id { get; set; }
    public IEnumerable<string> L { get; set; }
    public CompletionField Suggest { get; set; }
}

void Main()
{
    var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
    var connectionSettings = new ConnectionSettings(pool)
            .DefaultIndex("autocomplete");

    var client = new ElasticClient(connectionSettings);

    if (client.IndexExists("autocomplete").Exists)
        client.DeleteIndex("autocomplete");

    client.CreateIndex("autocomplete", ci => ci
        .Mappings(m => m
            .Map<EO_CategoryAutocomplete>(mm => mm
                .AutoMap()
                .Properties(p => p
                    .Completion(c => c
                        .Contexts(ctx => ctx
                            .Category(csug => csug
                                .Name("lang")
                                .Path("l")
                            )
                            .Category(csug => csug
                                .Name("type")
                                .Path("t")
                            )
                            .Category(csug => csug
                                .Name("home")
                                .Path("h")
                            )
                        )
                        .Name(n => n.Suggest)
                    )
                )
            )
        )
    );

    client.IndexMany(new[] {
        new EO_CategoryAutocomplete 
        {
            Id = "1",
            Suggest = new CompletionField
            {
                Input = new [] { "async", "await" },
                // explicitly pass a context for lang
                Contexts = new Dictionary<string, IEnumerable<string>>
                {
                    { "lang", new [] { "c#" } }
                }
            }
        },
        new EO_CategoryAutocomplete
        {
            Id = "2",
            Suggest = new CompletionField
            {
                Input = new [] { "async", "await" },
                // explicitly pass a context for lang
                Contexts = new Dictionary<string, IEnumerable<string>>
                {
                    { "lang", new [] { "javascript" } }
                }
            }
        },
        new EO_CategoryAutocomplete
        {
            Id = "3",
            // let completion field mapping extract lang from the path l
            L = new [] { "typescript" },
            Suggest = new CompletionField
            {
                Input = new [] { "async", "await" },
            }
        }
    }, "autocomplete");

    client.Refresh("autocomplete");

    var searchResponse = client.Search<EO_CategoryAutocomplete>(s => s
        .Suggest(su => su
            .Completion("categories", cs => cs
                .Field(f => f.Suggest)
                .Prefix("as")
                .Contexts(co => co
                    .Context("lang", 
                        cd => cd.Context("c#"), 
                        cd => cd.Context("typescript"))
                )
            )
        )
    );

    // do something with suggestions
    var categorySuggestions = searchResponse.Suggest["categories"];
}

searchResponse收益

{
  "took" : 2,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 0,
    "max_score" : 0.0,
    "hits" : [ ]
  },
  "suggest" : {
    "categories" : [
      {
        "text" : "as",
        "offset" : 0,
        "length" : 2,
        "options" : [
          {
            "text" : "async",
            "_index" : "autocomplete",
            "_type" : "eo_categoryautocomplete",
            "_id" : "3",
            "_score" : 1.0,
            "_source" : {
              "id" : "3",
              "l" : [
                "typescript"
              ],
              "suggest" : {
                "input" : [
                  "async",
                  "await"
                ]
              }
            },
            "contexts" : {
              "lang" : [
                "typescript"
              ]
            }
          },
          {
            "text" : "async",
            "_index" : "autocomplete",
            "_type" : "eo_categoryautocomplete",
            "_id" : "1",
            "_score" : 1.0,
            "_source" : {
              "id" : "1",
              "suggest" : {
                "input" : [
                  "async",
                  "await"
                ],
                "contexts" : {
                  "lang" : [
                    "c#"
                  ]
                }
              }
            },
            "contexts" : {
              "lang" : [
                "c#"
              ]
            }
          }
        ]
      }
    ]
  }
}

建议使用ID "1"和的文档"3"。您还可以使用“
源过滤”仅从中返回您感兴趣的字段_source



 类似资料:
  • 本文向大家介绍windows7系统安装elasticsearch5.X,包括了windows7系统安装elasticsearch5.X的使用技巧和注意事项,需要的朋友参考一下 一、安装jdk ElasticSearch是基于lucence开发的,也就是运行需要java jdk支持。所以要先安装JAVA环境。 由于ElasticSearch 5.x 往后依赖于JDK 1.8的,所以现在我们下载JDK

  • 要使人晓得智慧和训诲,分辨通达的言语。使人处事,领受智慧、仁义、公平、正直的训诲。使愚人灵明、使少年人有知识和谋略。使智慧人听见、增长学问、使聪明人得着智谋、使人明白箴言和譬喻、懂得智慧人的言词和谜语。敬畏耶和华使知识的开端,愚妄人藐视智慧和训诲。 上下文管理器 在《文件(1)》中提到,如果要打开文件,一种比较好的方法是使用with语句,因为这种方法,不仅结构简单,更重要的是不用再单独去判断某种异

  • Context managers for use with the with statement. 注解 When using Python 2.5, you will need to start your fabfile with from __future__ import with_statement in order to make use of the with statement (w

  • 我有一个C++SFMLOpenGL4.1渲染引擎,我想移植到OS X10.9小牛。SFML似乎不支持OS X上的OpenGL4(或3)。如果我想坚持使用C++(我更喜欢避免Obj C)来获得OS X中的渲染上下文,我有什么选择?

  • 问题内容: 我正在使用ElasticSearch,并且具有以下索引映射: 我该如何获得建议者在返回“扑热息痛片”时立即返回: 我需要使用自定义分析器和字典吗? 问题答案: 问题是参数。如果将其设置为它返回您的预期结果。我无法真正向您解释0.8为何有效的原因,因为实际上0.5意味着50%的术语可能写错了,这就是您的用例,但在某种程度上可以与0.8一起使用。也许在elasticsearch用户组中询问

  • 当我将应用程序作为独立的Java程序运行时,它运行得很好。当我将其作为applet运行时,它会通过以下堆栈跟踪抛出JAXBException。 当我添加jaxb.properties时,我收到以下错误- 我在类路径中添加了以下罐子 - 2.2.2.1 jsr311-api-1.1.1 球衣核心-1.2 泽西-客户端-1.2 导致此错误的原因。我是否缺少任何依赖项。 编辑:我在浏览器和开发环境中使用