Elasticsearch 2.x - возвращает список черепицы
У меня есть поле "searchtext", которое я предоставил подполе "shingle", и я проиндексировал это поле searchtext с помощью фильтра shingles.
Мне нужно получить список черепицы, созданной для этого поля, чтобы я мог выполнить некоторые операции с этим полем. Когда я получаю поле "searchtext.shingle", оно просто содержит оригинальный текст.
Означает ли это, что анализатор гальки, который я настроил, не работал, или что мне нужно вернуть список гальки по-другому?
2 ответа
Вы можете получить все термины из вашего "опоясывающего" поля, используя _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 вы также можете проверить работу анализатора с помощью API Analyze. В качестве примера давайте создадим собственный анализатор и затем проверим, какие токены он генерирует для заданного ввода
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