2012-10-29 14 views
11

Qualcuno può dirmi se esiste un equivalente della direttiva Solr copyField su ElasticSearch?Equivalente di copyField di Solr su ElasticSearch?

So che c'è il tipo multi-campo: http://www.elasticsearch.org/guide/reference/mapping/multi-field-type.html E 'bello quando si desidera applicare più analizzatori sullo stesso campo.

Ma non è esattamente lo stesso. Solr permette di "fondere" più campi in una sola:

<field name="id" type="string" indexed="true" stored="true"/> 
<field name="name" type="string" indexed="true" stored="true"/> 
<field name="subject" type="string" indexed="true" stored="true"/> 
<field name="location" type="string" indexed="true" stored="true"/> 
<field name="all" type="text" indexed="true" stored="true" multiValued="true"/> 
<copyField source="*" dest="all"/> 

Questo plugin è abbastanza promettente: https://github.com/yakaz/elasticsearch-analysis-combo

perché permette di tornare i risultati come un unico campo quando si utilizza un elasticsearch campo multi valore. Ma non è ancora esattamente lo stesso perché non permette di "unire" più campi.


Vorrei una combinazione di entrambi gli analizzatori Combo e Solr copyField.

Ho un modello post sul blog (titolo/descrizione campi) e vorrei copiare sia il titolo e la descrizione su un singolo campo "blogContent" su cui Io applicare 2 analizzatori differenti.

Esiste una soluzione in ElasticSearch?

risposta

8

C'è special _all field che per impostazione predefinita ottiene una copia di tutti gli altri campi. Puoi controllare l'inclusione nel campo _all utilizzando l'attributo include_in_all. Tuttavia, sei limitato a un campo come questo. Se ne hai bisogno di più di uno, dovrai gestirlo dal lato della ricerca cercando più campi.

E 'anche possibile ottenere una funzionalità simile a copyField utilizzando multi_field con l'attributo "path": "just_name":

curl -XPUT localhost:9200/test-idx -d '{ 
    "settings": { 
     "index": { 
      "number_of_shards": 1, 
      "number_of_replicas": 0 
     } 
    }, 
    "mappings": { 
     "doc": { 
      "properties": { 
       "first_name": { 
        "type": "multi_field", 
        "path": "just_name", 
        "fields": { 
         "first_name": {"type": "string", "index": "analyzed"}, 
         "name": {"type": "string","index": "analyzed"} 
        } 
       }, 
       "last_name": { 
        "type": "multi_field", 
        "path": "just_name", 
        "fields": { 
         "last_name": {"type": "string", "index": "analyzed"}, 
         "name": {"type": "string","index": "analyzed"} 
        } 
       } 
      } 
     } 
    } 
}' 
echo 
curl -XPUT localhost:9200/test-idx/doc/1 -d '{ 
    "first_name": "Sebastien", 
    "last_name": "Lorber" 
}' 
echo 
curl -XPOST localhost:9200/test-idx/_refresh 
echo 
curl "localhost:9200/test-idx/doc/_search?q=name:Sebastien" 
echo 
curl "localhost:9200/test-idx/doc/_search?q=name:Lorber" 
+0

Conosco il _all ma sarebbe meglio essere in grado di creare molti diversi _all se necessario –

+1

Sono d'accordo, sarebbe una bella caratteristica di avere. Sfortunatamente, non è ancora implementato https://github.com/elasticsearch/elasticsearch/issues/1169 – imotov

Problemi correlati