2015-06-30 13 views
6

Sto utilizzando Nutch per eseguire la ricerca per indicizzazione di un sito e indicizzarlo in Ricerca elastica. Il mio sito ha dei meta-tag, alcuni dei quali contengono un elenco di ID separati da virgole (che intendo usare per la ricerca). Ad esempio:Indicizzazione di un campo di valori separati da virgola in Ricerca elastica

contentTypeIds = "2,5,15". (nota: nessuna parentesi quadra).

Quando ES lo indicizza, non posso cercare contentTypeIds: 5 e trovare documenti il ​​cui contentTypeIds contiene 5; questa query restituisce solo i documenti il ​​cui contentTypeIds è esattamente "5". Tuttavia, desidero trovare documenti il ​​cui contentTypeIds contiene 5.

In Solr, questo viene risolto impostando il campo contentTypeIds su multiValued = "true" nello schema.xml. Non riesco a trovare come fare qualcosa di simile in ES.

Sono nuovo di ES, quindi probabilmente mi sono perso qualcosa. Grazie per l'aiuto!

risposta

11

Creare custom analyzer che suddividerà il testo indicizzato in token con virgole.

Quindi è possibile provare a cercare. Se non ti interessa la pertinenza, puoi utilizzare il filtro per cercare tra i tuoi documenti. Il mio esempio mostra come è possibile tentare la ricerca con term filter.

Qui sotto puoi trovare come farlo con il plugin sense.

DELETE testindex 

PUT testindex 
{ 
    "index" : { 
     "analysis" : { 
      "tokenizer" : { 
       "comma" : { 
        "type" : "pattern", 
        "pattern" : "," 
       } 
      }, 
      "analyzer" : { 
       "comma" : { 
        "type" : "custom", 
        "tokenizer" : "comma" 
       } 
      } 
     } 
    } 
} 

PUT /testindex/_mapping/yourtype 
{ 
     "properties" : { 
      "contentType" : { 
       "type" : "string", 
       "analyzer" : "comma" 
      } 
     } 
} 

PUT /testindex/yourtype/1 
{ 
    "contentType" : "1,2,3" 
} 

PUT /testindex/yourtype/2 
{ 
    "contentType" : "3,4" 
} 

PUT /testindex/yourtype/3 
{ 
    "contentType" : "1,6" 
} 

GET /testindex/_search 
{ 
    "query": {"match_all": {}} 
} 

GET /testindex/_search 
{ 
    "filter": { 
     "term": { 
      "contentType": "6" 
     } 
    } 
} 

Spero che sia d'aiuto.

+0

funziona bene, grazie mille! – Yann

+0

e ha funzionato anche con l'indicizzazione Nutch! – Yann

Problemi correlati