2016-08-05 20 views
2

現在、特定のフィールドに最大n語のドキュメントを返す方法を探しています。単語検索用のElasticsearchクエリフィルタ

"name"フィールドに3単語未満の文書が含まれているが、私が知る限りword_countのようなものはありません。

これを処理する方法を知っている人はいますか?

GET myindex/myobject/_search 
{ 
    "query": { 
    "filtered": { 
     "filter": { 
     "bool": { 
      "must": [ 
      { 
       "word_count": { 
       "name": { 
        "lte": 3 
       } 
       } 
      } 
      ] 
     } 
     }, 
     "query": { 
     "match_all" : { } 
     } 
    } 
    } 
} 

答えて

2

あなたは与えられたフィールドにインデックスするために、トークンの数をtoken_countデータ型を使用することができますし、そのフィールドを検索します。

# 1. create the index/mapping with a token_count field 
PUT myindex 
{ 
    "mappings": { 
    "myobject": { 
     "properties": { 
     "name": { 
      "type": "string", 
      "fields": { 
      "word_count": { 
       "type":  "token_count", 
       "analyzer": "standard" 
      } 
      } 
     } 
     } 
    } 
    } 
} 

# 2. index some documents 

PUT index/myobject/1 
{ 
    "name": "The quick brown fox" 
} 
PUT index/myobject/2 
{ 
    "name": "brown fox" 
} 

# 3. the following query will only return document 2 
POST myindex/_search 
{ 
    "query": { 
    "range": { 
     "name.word_count": {  
     "lt": 3 
     } 
    } 
    } 
} 
+0

これは可能な解決策のようです。おそらく、すべての文書のインデックスを再作成する必要がありますが、これは大丈夫です。ご協力ありがとうございました。 – Jesse

+0

はい、新しい索引を作成し、 'name.word_count'フィールドに値を入れるためにデータを再索引付けする必要があります。 – Val

関連する問題