2016-12-19 2 views
0

У меня есть этот SQLПреобразование SQL в ElasticSearch Query

Select * from a where a.col1 like %search_str% OR a.col2 like %search_str% OR a.col3 like %search_str%; 

Что будет Упругие Запрос для этого?

Используется так:

var query = { 
     "query" => { 
      "multi_match" => { 
        "query" => "#{search_str}", 
        "fields" =>["col1","col2","col3"] 
      } 
     } 
    } 

Not Getting очень точные результаты.

+0

http://stackoverflow.com/questions/41093662/wilcard-search-or- partial-matching-in-elastic-search/41094077 # 41094077 –

ответ

0

Try ниже код

{ 
"bool": { 
    "should": [ 
     { 
      "multi_match" : { 
      "query":  "#{search_str}", 
      "type":  "cross_fields", 
      "fields":  [ "col1", "col2", "col3" ], 
      "fuzziness": 2, 
      "minimum_should_match": "50%" 
      } 
     } 
    ] 
    } 
} 
+0

И как, например, предположим, что если он проиндексирует значение «hello world», а поисковый запрос «llo» –

+0

Вам нужно добавить дополнительную «fuzzy_query» (отредактировать расстояние 2) в вышеупомянутом запросе bool, если вы хотите поймать «llo». – Zouzias

+0

Я обновил свой ответ. Пожалуйста попробуйте. –

0

Если ограничить исследования в равной или как операции, вам не нужно анализировать текст.

Измените сопоставление на ключевое слово, чтобы избежать анализа, а затем используйте подстановочный знак или регулярное выражение для поиска в одном полном фрагменте текста.

Для получения более подробной информации см. here.

PUT _template/test 
{ 
    "template": "test-*", 
    "settings": { 
    "analysis": { 
     "normalizer": { 
     "my_normalizer": { 
      "type": "custom", 
      "char_filter": [], 
      "filter": ["lowercase", "asciifolding"] 
     } 
     } 
    } 
    }, 
    "mappings": { 
    "_default_": { 
     "_all": { 
     "enabled": false 
     }, 
     "dynamic_templates": [ 
     { 
      "strings_as_keywords": { 
      "match_mapping_type": "string", 
      "mapping": { 
       "type": "keyword", 
       "normalizer": "my_normalizer" 
      } 
      } 
     } 
     ] 
    } 
    } 
} 

Вот пример, чтобы создать шаблон для всех новых индексов, начиная с именем тест-, что:

  • карту все строки как простые ключевые слова без ограничения символов
  • нормализуют данных в вводе для нечувствительных к регистру, нечувствительных к акценту исследований
  • удалить поле _all

И, вероятно, вы хотите, чтобы преобразовать запрос на фильтр, чтобы точно соответствовать вашим деталям и не использовать систему оценки

GET /test-1/movies/_search 
{ 
    "query": { 
    "bool": { 
     "filter": { 
     "bool": { 
      "should": [ 
      { 
       "wildcard": { 
       "title": "*tar war*" 
       } 
      }, 
      { 
       "wildcard": { 
       "title": "*ord of the ring*" 
       } 
      } 
      ] 
     } 
     } 
    } 
    } 
} 
Смежные вопросы