2015-07-10 1 views
1

Я хотел бы найти слово или слова, которые состоят из дефиса, whitecaps и нечувствительны к регистру.эластичный поиск поиск случай нечувствительность дефисы whitecaps

Здесь индекс структуры:

body' => array(
    'settings' => array(
    "analysis" => array(
     "analyzer" => array(
     "default" => array(
      "type" => "custom", 
      'tokenizer' => "whitespace", 
      "filter" => array("lowercase") 
     ), 
     "autoCompleteSearch" => array(
      "tokenizer" => "standard", 
      "filter" => array("lowercase", "trim", "standard") 
     ) 
    ) 
) 
), 
'mappings' => array(
    "myindex" => array(
    'properties' => array(
     'Id' => array(
     'type' => 'integer', 
     'index' => 'not_analyzed' 
    ), 
     'Title' => array(
     'type' => 'string', 
     'fields'=> array(
      raw' => array(
      'type' => 'string', 
      "search_analyzer" => "autoCompleteSearch", 
      'index' => 'not_analyzed' 
     ) 
     ) 
    ), 
     'Content' => array(
     'type' => 'string', 
     'fields'=> array(
      raw' => array(
      'type' => 'string', 
      "search_analyzer" => "autoCompleteSearch", 
      'index' => 'not_analyzed' 
     ) 
     ) 
    ) 
    ) 
) 
) 

Вот запрос:

"query" : { 
    "query_string": { 
    "query": "*t-shir red*", 
    "lowercase_expanded_terms": false, 
    "fields": [ 
     "Title.raw", 
     "Content.raw" 
    ] 
    } 
} 

Я хочу найти T-рубашка RED, как я пишу в поле поиска напр. «футболка красная».

спасибо, что заблаговременно!

+0

Сделайте свой '.raw' поля или создать другой подпол (если вам нужно '.raw' для чего-то еще) как« проанализированный »с помощью анализатора« keyword »в сочетании с фильтром« нижний регистр ». Так что подполе будет сохранять текст как есть, но в нижнем регистре. А при использовании 'query_string' вы должны указать' Title.raw_lowercased'. –

ответ

0

Нечто подобное с настраиваемым сырым нижним регистром подполем:

{ 
    "settings": { 
    "analysis": { 
     "analyzer": { 
     "my_keyword_lowercase_analyzer": { 
      "type": "custom", 
      "tokenizer": "keyword", 
      "filter": [ 
      "lowercase" 
      ] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "myindex": { 
     "_source": { 
     "enabled": true 
     }, 
     "properties": { 
     "Title": { 
      "type": "string", 
      "fields": { 
      "raw": { 
       "type": "string", 
       "index": "not_analyzed" 
      }, 
      "raw_lowercase": { 
       "type": "string", 
       "analyzer": "my_keyword_lowercase_analyzer" 
      } 
      } 
     }, 
     "Content": { 
      "type": "string", 
      "fields": { 
      "raw": { 
       "type": "string", 
       "index": "not_analyzed" 
      }, 
      "raw_lowercase": { 
       "type": "string", 
       "analyzer": "my_keyword_lowercase_analyzer" 
      } 
      } 
     }, 
     "Image": { 
      "type": "string", 
      "analyzer": "standard" 
     } 
     } 
    } 
    } 
} 

И запрос:

{ 
    "query": { 
    "query_string": { 
     "query": "*t-shirt\\ red*", 
     "lowercase_expanded_terms": false, 
     "fields": [ 
     "Title.raw_lowercase", 
     "Content.raw_lowercase" 
     ] 
    } 
    } 
} 
+0

Да, Андрей, я могу искать строчные строчки. Мне просто нужно добавить php-функцию strtolower при отправке строки в поиск упругой информации. Еще раз спасибо. Желаю вам всего наилучшего, и я надеюсь, что у меня снова не будет проблем с поиском эластичности. И примите мои извинения, если мои вопросы легки или мне нравятся, я просто не знаю, как правильно использовать ES. С уважением :) – Sensini

+0

'query_string' не является тривиальным ;-), не волнуйтесь. –

+0

Можете ли вы дать мне совет, как я могу убежать? (Двойные кавычки), я попытался добавить обратную косую черту, но я постоянно получаю фатальную ошибку, когда я заменяю «на». Потому что я хочу искать дюймы («) для ex , Ноутбук 15.6 ". Другие зарезервированные символы отлично + - && ||!() {} []^~ *?: \/Я могу заменить их без проблем, но« ломается ». – Sensini