2016-01-11 4 views
1

Я пытаюсь обновить с помощью ElasticSearch 0.90.3 до 2.0 и столкнуться с некоторыми проблемами. Люди, которые изначально настроили и настроили ES, больше не доступны, поэтому я собираюсь об этом с очень небольшим знанием о том, как это работает.Реализация пользовательского фильтра ElasticSearch для всех запросов

Они сконфигурировали ES 0.90.3 для использования ElasticSearch-ServiceWrapper и Tire, кроме того, есть только несколько небольших изменений конфигурации.

По большей части обновление прошло гладко, я заменил информацию об установке в процессе развертывания крышки, чтобы теперь установить ES 2.0 вместо 0.90.3, и эта служба подходит, однако я не могу получить частичное совпадение, происходило прежде, чем работать. Мне нужно настроить стандартный фильтр, который применяется ко всем поисковым запросам, которые будут искать все поля, используя частичные совпадения. Я выполнил множество поисковых запросов Google, и это самое близкое, что я могу придумать, но он по-прежнему не возвращает частичных совпадений.

index: 
    settings: 
    analysis: 
     filter: 
     autocomplete_filter: 
      type: edge_ngram 
      min_gram: 2 
      max_gram: 32 
     analyzer: 
     autocomplete: 
      type: custom 
      tokenizer: standard 
      filter: [ lowercase, autocomplete_filter ] 

mappings: 
    access_point_status: 
    properties: 
     text: 
     type: string 
     analyzer: autocomplete 
     search_analyzer: standard 

Я надеялся, что не нужно заменить Тир, как бы сделать это обновление гораздо сложнее, но если проблема лежит в запросах и не установка, то я буду идти по этому пути. Это пример запроса, который не возвращает желаемых результатов:

curl -X GET 'http://localhost:9200/access_point_status/_search?from=0&size=100&pretty' -d 
'{ "query": 
    { "bool": 
    { "must": [ 
     { "match": 
     { "_all": 
      { "query": 
      "1925","type":"phrase_prefix" 
      } 
     } 
     } 
    ]} 
    } 
    ,"sort": [ { "name":"asc" } ] 
    ,"filter": { "term": { "domain":"domain_1" } } 
    ,"size":100,"from":0 
}' 

Благодаря

ответ

0

Так что я нашел большую часть вопросов. Индексы создавались Tire и data_tables, используя другое сопоставление. Это невозможно было бы перезаписать после создания.

Я создал эти фильтры, а затем применять их к полям,

index: 
    analysis: 
    filter: 
     edge_ngram_filter: 
     type: edge_ngram 
     min_gram: 2 
     max_gram: 32 
     side: front 
    analyzer: 
     character_only: 
     type: custom 
     tokenizer: standard 
     filter: [ lowercase, edge_ngram_filter ] 
     special_character: 
     type: custom 
     tokenizer: keyword 
     filter: [ lowercase, edge_ngram_filter ] 

И я соответствие около 95% от того, что я хотел бы надеяться, тоже с

curl -X GET 'http://localhost:9200/access_point_status/_search from=0&size=100&pretty' -d ' 
{ 
    "query": 
    { 
    "bool": 
    { 
     "must":[ 
     { 
     "prefix": 
     { 
      "_all":"bsap-" 
     } 
     }] 
    } 
    },"sort":[ 
    { 
    "name":"asc" 
    }],"filter": 
    { 
    "term": 
    { 
     "domain":"domain_1" 
    } 
    },"size":100,"from":0 
}' 

Единственное, что я 'm missing получает специальные символы для соответствия, а символы верхнего регистра не сопоставляются. Я пробовал несколько типов запросов, query_string, похоже, не соответствует каким-либо элементарным. У кого-нибудь есть мысли по другим запросам? Мне нужно совместить такие вещи, как адреса mac, ip's, а затем комбинированные поля текста/числа с -_ ,. как разделители.