2016-08-02 2 views
-1

私はサブフィールド "屋根板"を提供したフィールド "searchtext"を持っていて、そのsearchtextフィールドを帯状疱疹フィルターで索引付けしています。Elasticsearch 2.x - 帯状疱疹のリストを返します。

私はそのフィールドにいくつかの操作を行うことができるように、そのフィールド用に作成された帯状疱疹のリストを取得する必要があります。 「searchtext.shingle」フィールドを取得すると、元のテキストだけが含まれます。

これは、私がセットアップした屋根板アナライザーが機能していないこと、または屋根板のリストを別の方法で戻す必要があることを意味しますか?あなたはこのよう_termvectors endpointを使用して、あなたの「シングリング」フィールドのすべての条項を取得することができ

+0

'を発しますサブフィールド "shingle"はマッピングまたは実際のjsonドキュメントを意味しますか?前者の場合、最初にsearchtext.shingleフィールドをどのように取得していますか? – keety

+0

私は、「searchtext」という名前のプロパティへのマッピングを持っています。私のマッピングでは、作成されたシングルを明示的に取得できるように「searchtext.shingle」へのマッピングを作成しました。 私は通常、自分のドキュメントクラスへのマッピングを使用しますが、このマッピングは作成したマッピングによって作成されたものなので、直接存在しません。私は、ドキュメントのマッピングを使用するのではなく、特定のデータフィールドを取得するためにフィールドを使用して、返されるデータの量が非常に膨大になることがあるようにしたい。 –

答えて

1

:ヴァルの答えに加えて

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 
}' 
+0

これで運が良かったですか? – Val

+0

こんにちは、ありがとうございます。それはまさに私が必要としていたものです。 –

+0

素晴らしい、嬉しい助け! – Val

0

、あなたはまた、アナライザが分析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 
+0

ありがとうございます。私は、JSONを直接使ってアナライザをテストしましたが、.NETコードを考えています! –

関連する問題