Elasticsearch2.x-返回木瓦列表

本文关键字:列表 返回 Elasticsearch2 | 更新日期: 2023-09-27 17:59:50

我有一个字段"searchtext",我提供了一个子字段"瓦片",我用瓦片过滤器索引该searchtext字段。

我需要得到为该字段创建的木瓦列表,这样我就可以在该字段上进行一些操作。当我检索"searchtext.theb"字段时,它只包含原始文本。

这是否意味着我设置的带状疱疹分析仪不工作,或者我需要以不同的方式返回带状疱疹列表?

Elasticsearch2.x-返回木瓦列表

您可以使用_termvectors端点检索"带状"字段的所有术语,如下所示:

curl -XGET 'http://localhost:9200/your_index/your_type/1/_termvectors?pretty=true' -d '{
  "fields" : ["searchtext.shingle"],
  "offsets" : true,
  "payloads" : true,
  "positions" : true,
  "term_statistics" : true,
  "field_statistics" : true
}'

除了Val的答案外,您还可以使用Analyze API测试分析器的工作情况。举个例子,让我们构建一个自定义分析器,然后测试它为给定的输入生成什么令牌

var pool = new SingleNodeConnectionPool(new Uri("http://localhost:9200"));
var defaultIndex = "analyzer-test";
var connectionSettings = new ConnectionSettings(pool)
        .DefaultIndex(defaultIndex);
var client = new ElasticClient(connectionSettings);
if (client.IndexExists(defaultIndex).Exists)
    client.DeleteIndex(defaultIndex);
client.CreateIndex(defaultIndex, c => c
    .Settings(s => s
        .Analysis(a => a
            .TokenFilters(tf => tf
                .Shingle("my_shingle", sh => sh
                    .MaxShingleSize(3)
                    .OutputUnigrams()
                )
            )
            .Analyzers(an => an
                .Custom("my_shingle_analyzer", sa => sa
                    .Tokenizer("standard")
                    .Filters("lowercase", "my_shingle")
                )
            )
        )
    )
);

现在测试

var analysisResponse = client.Analyze(a => a
    .Index(defaultIndex)
    .Analyzer("my_shingle_analyzer")
    .Text("This is the text I want to analyze")
);
foreach (var token in analysisResponse.Tokens)
{
    Console.WriteLine($"{token.Token}");
}

发出以下令牌

this
this is
this is the
is
is the
is the text
the
the text
the text i
text
text i
text i want
i
i want
i want to
want
want to
want to analyze
to
to analyze
analyze