2016-03-13 1 views
0

Je veux laisser un champ indexé par différents analyseurs my_analyzer_1 et my_analyzer_2, ressemble à:ElasticSearch - spécifier différents index et analyseurs recherche pour un champ

{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_analyzer_1": { 
      "type":"custom", 
      "tokenizer": "keyword" 
     }, 
     "my_analyzer_2": { 
      "type":"custom", 
      "tokenizer": "standard" 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "Names": { 
     "properties": { 
     "name": { 
      "type": "string", 
      // Is it possible? 
      "analyzer": "my_analyzer_1, my_analyzer_2" 
     } 
     } 
    } 
    } 
} 

Et quand la recherche, spécifiez manuellement l'utilisation my_analyzer_1 ou my_analyzer_2.

Cela signifie, pour fox brown, la recherche par terme fox. Lors de l'utilisation my_analyzer_1 ne sera pas fox brown parce que fox brown est analysé comme un terme en raison de keyword tokenizer. Tout en utilisant my_analyzer_2 l'obtiendra parce qu'il est analysé comme 2 termes fox et brown.

Elasticsearch permet de spécifier search_analyzer et index_analyzer, mais il semble qu'il ne permet que de spécifier single search_analyzer et single index_analyzer.

Est-ce que mon exigence est possible avec Elasticsearch?

(Une solution consiste à utiliser 2 champs, une utilisation keyword Tokenizer et une autre utilisation standard Tokenizer)

+1

'multifield' est une option pour vous. – Richa

Répondre

2
"name": { 
    "type": "string", 
    "fields": { 
     "analyzed1": { "type": "string", "analyzer": "analyzer1" }, 
     "analyzed2": { "type": "string", "analyzer": "analyzer2" } 
    } 
} 

Vous pouvez ensuite interroger sur

`name.analyzed1` or `name.analyzed2` 

selon que vous souhaitez interroger à l'aide analyzer1 ou analyzer2

Référence: https://www.elastic.co/guide/en/elasticsearch/reference/current/_multi_fields.html

+0

Bonne réponse! Aussi trouver si ne spécifie pas l'analyseur lors d'une recherche comme requête sur 'name', il utilise l'analyseur par défaut. – coderz

+0

Yep .. .it utilise alors un analyseur standard. – Rahul