2015-06-30 2 views
6

Я использую Nutch для сканирования сайта и индексации его в Elastic search. На моем сайте есть метатеги, некоторые из которых содержат список идентификаторов, разделенных запятыми (которые я намерен использовать для поиска). Например:Индексирование поля значений, разделенных запятой, в Elastic Search

contentTypeIds = "2,5,15". (примечание: нет квадратных скобок).

Когда ES индексирует это, я не могу найти contentTypeIds: 5 и найти документы, contentTypeIds содержит 5; этот запрос возвращает только те документы, чьи contentTypeIds равны «5». Тем не менее, я хочу найти документы, contentTypeIds которых содержат 5.

В Solr это решается путем установки поля contentTypeIds в multiValued = "true" в schema.xml. Я не могу найти, как сделать что-то подобное в ES.

Я новичок в ES, поэтому я, вероятно, что-то пропустил. Спасибо за вашу помощь!

ответ

11

Создать custom analyzer, который будет разделять индексированный текст на токены запятыми.

Затем вы можете попытаться выполнить поиск. Если вам не нужна релевантность, вы можете использовать фильтр для поиска документов. В моем примере показано, как вы можете попытаться выполнить поиск с помощью term filter.

Ниже вы можете найти, как это сделать с помощью плагина 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" 
     } 
    } 
} 

Надеюсь, это поможет.

+0

отлично работает, спасибо большое! – Yann

+0

, и он также работал с индексированием Nutch! – Yann

Смежные вопросы