、あなたはまた、アナライザが分析APIを使用して働いているかをテストすることができます。一例として、のは、カスタム・アナライザを構築し、それを
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}");
}
をテストするために、今、与えられた入力
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")
)
)
)
)
);
のために、それが生成するものをトークンテストしてみましょうすると、次のトークンを提供
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
'を発しますサブフィールド "shingle"はマッピングまたは実際のjsonドキュメントを意味しますか?前者の場合、最初にsearchtext.shingleフィールドをどのように取得していますか? – keety
私は、「searchtext」という名前のプロパティへのマッピングを持っています。私のマッピングでは、作成されたシングルを明示的に取得できるように「searchtext.shingle」へのマッピングを作成しました。 私は通常、自分のドキュメントクラスへのマッピングを使用しますが、このマッピングは作成したマッピングによって作成されたものなので、直接存在しません。私は、ドキュメントのマッピングを使用するのではなく、特定のデータフィールドを取得するためにフィールドを使用して、返されるデータの量が非常に膨大になることがあるようにしたい。 –