elasticsearch.net 7路径层次结构

laik7k3q  于 2021-06-13  发布在  ElasticSearch
关注(0)|答案(0)|浏览(279)

在nest.net7中,我想为文档路径编制索引,以便查询路径的任何部分,并获取该路径节点下的文档。我正在使用路径层次标记器。我遵循这些例子。我似乎得到了正确的路径解析,我用analyze进行了测试。我将路径Map为自定义分析器。索引文档。它们用部分目录查询路径。我得到0个结果。我尝试过各种组合,有时会得到一些,但不是全部。我错过了什么。路径查询类似于“w31worksitedev/person\u test\u 1”。这是我的密码

indexResponse = elasticClient.Indices.Create(IndexName, c => c
                                            .Settings(s => s
                                              .Analysis(a => a
                                                    .Analyzers(an => an
                                                        .Custom("custom_path_tree", ca => ca
                                                            .Tokenizer("path_hierarchy")
                                                                )
                                                             )
                                                         )
                                                   )
                                                    .Map<Document>(mm => mm
                                                        .AutoMap()
                                                        .Properties(p => p
                                                         .Text(t => t
                                                            .Analyzer("custom_path_tree")
                                                            .Name(n => n.Path)
                                                              )
                                                         )
                                                     )
                                                );

           var initializerIndexResponse = elasticClient.Index(document, i => i
                                            .Index(IndexName)
                                            );

                var searchResponse4 = elasticSearchServices.elasticClient.Search<Document>(s => s
                                           .From(StartResults)
                                           .Size(MaxResults)
                                           .Index(IndexName)
                                           .Query(q => q
                                                .Term(m => m
                                                    .Field(f => f.Path)
                                                    .Value(queryStr)
                                                )
                                            )
                                    );

我成功了
nest.net v7 api有突破性的变化。v6代码不再适用于此问题(部分路径索引和文档路径查询)。关于如何用新规则编写代码,没有明确的文档示例。我得自己把它拼起来——花了不少时间。我刚刚开始ElasticSearch,所以我想这可能是比较容易的经验丰富的ElasticSearch编码。然而,我没有找到在中国如何做到这一点的例子。第7版。以下代码起作用(由于搜索区分大小写,所以我将路径小写)

indexResponse = elasticClient.Indices.Create(IndexName, i => i
                                    .Map<Document>(m => m.AutoMap())
                                    .Settings(s => s
                                        .Analysis(an => an
                                            .Analyzers(a => a
                                                .Custom(PathAnalyzerName, ca => ca
                                                     .Tokenizer(PathTokenizerName)
                                                     )
                                                 )
                                                )
                                            )
                                        .Map<Document>(m => m
                                        .AutoMap()
                                            .Properties(p => p
                                            .Text(t => t
                                            .Analyzer(PathAnalyzerName)
                                            .Name(n => n.Path)
                                    )
                                )
                            )
                        );

===
我尝试了nest.net7中的每一种搜索公式,以使路径层次结构部分搜索能够工作。它们在kabana低级查询中工作得很好。我想我没有漏掉任何东西。我使用的搜索查询公式检索所有路径。不是我在查询中输入的特定部分路径。所以最后,我没有其他的组合。我更喜欢fluidapi。如果有人能找到我的nest.net 7查询错误的地方,请提供一些指导。
下面是我能表达的最好的nest.net7高级查询。它似乎有时起作用,而不是其他时间

var searchResponse = elasticSearchServices.elasticClient.Search<Document>(s => s
                                .From(StartResults)
                                .Size(MaxResults)
                                .Index(IndexName)
                                .Query(q => q
                                   .Match(m => m
                                       .Field(p => p.Path)
                                        .Query(queryStr)
                                      )
                                    )
                                );

下面是第一次工作的低级查询,没有问题。

var lowLevelResponse = elasticSearchServices.elasticClient.LowLevel.Search<SearchResponse<Document>>
                                         (
                                          IndexName,
                                          @" { ""query"": {
                                                  ""term"": {
                                                     ""path"": """ + queryStr + "\"   } }}"
                                         );

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题