在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 + "\" } }}"
);
暂无答案!
目前还没有任何答案,快来回答吧!