2017-11-23 11 views
0

"@"接頭辞でテキストを一致させようとしています。 ElasticSearchの "@stackoverflow"私は、ブールクエリを使用していて、これらの両方のは、まったく同じ結果を返すと、実際に私の@記号を無視:なし@(記号で)を使用したエラスティック検索クエリは、同じものを持っていません。

{"query":{"bool":{"must":[{"query_string":{"default_field":"text","default_operator":"AND","query":"@stackoverflow"}}]}},"size":20} 

クエリ2:

{"query":{"bool":{"must":[{"query_string":{"default_field":"text","default_operator":"AND","query":"stackoverflow"}}]}},"size":20} 

@と

クエリ1を私のマッピング:

私はそれを\ u0040にエンコードしようとしましたが、違いはありませんでした。

+0

あなたのマッピングも表示できますか? – Val

+0

@Valが質問に追加されました。 – Noam

答えて

1

あなたtextフィールドの型がテキストであり、あなたはおそらくしたい

GET /_analyze?analyzer=standard&[email protected] 
{ 
    "tokens": [ 
    { 
     "token": "stackoverflow", 
     "start_offset": 1, 
     "end_offset": 14, 
     "type": "<ALPHANUM>", 
     "position": 0 
    } 
    ] 
} 

下に見ることができるよう@stackoverflowは、分析プロセスの後stackoverflowとしてインデックス付けされることを意味standardアナライザによってデフォルトで解析され

GET /_analyze?analyzer=whitespace&[email protected] 
{ 
    "tokens": [ 
    { 
     "token": "@stackoverflow", 
     "start_offset": 0, 
     "end_offset": 14, 
     "type": "word", 
     "position": 0 
    } 
    ] 
} 
:あなたは完全一致が必要な場合 keywordタイプを使用するか、またはあなたのデータで @符号を維持するよう whitespaceなど、さまざまなアナライザを、指定のいずれかに

更新

次に、フィールドのカスタムアナライザを使用して、値のインデックス方法を制御できるようにすることをおすすめします。このようにインデックスを再作成すれば、検索を実行できるはずです:

PUT posts 
{ 
    "settings": { 
    "index": { 
     "analysis": { 
     "analyzer": { 
      "my_analyzer": { 
      "type": "custom", 
      "tokenizer": "whitespace", 
      "filter": [ "lowercase" ] 
      } 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "post": { 
     "properties": { 
     "upvotes": { 
      "type": "long" 
     }, 
     "created_time": { 
      "type": "date", 
      "format": "strict_date_optional_time||epoch_millis" 
     }, 
     "ratings": { 
      "type": "long" 
     }, 
     "link": { 
      "type": "string" 
     }, 
     "pic": { 
      "type": "string" 
     }, 
     "text": { 
      "type": "string", 
      "analyzer": "my_analyzer" 
     }, 
     "id": { 
      "type": "string" 
     } 
     } 
    } 
    } 
} 
+0

ありがとう!私はまだちょっと混乱しています。タイプを 'keyword'またはアナライザーに変更するには、2つのオプションについて言及しました。最初のオプションを実行すると、インデックスを再構築する必要がありますか? 2番目のオプションを実行すると、クエリが遅くなりますか? – Noam

+0

それはあなたのデータで何をする必要があるかによって異なります。正確なマッチングを行う必要がある場合は、最初のオプションが簡単です。はい、再インデックスが必要です。 2番目のオプションは、必ずしも遅くなるわけではありませんが、データのクエリ方法によって異なります。 – Val

+0

'(@stackoverflow AND #elastic)OR WhitespaceAnalyzer'のようなブーリアンクエリを実行できるようにします。これは2番目のオプションが大幅に遅くなることを意味しますか? – Noam

関連する問題