2016-05-25 2 views
5

Я пытаюсь запустить подобный запрос в поле ElasticSearch:Поиск ElasticSearch поле содержится в значении

select * from products where 'milk' like '%'+name+'%'

Значение Я пытаюсь найти все документы, название продукта в данном случае является подстрока «молока».

Как я могу это сделать?

+0

Прочтите [документацию] (https: //www.el astic.co/guide/en/elasticsearch/guide/current/partial-matching.html). –

+0

Я не уверен, как это может мне помочь Мне не нужен: текст LIKE «% quick%», мне нужно обратное (см. Вопрос –

+0

Можете ли вы подробно остановиться на примере. Что-то вроде 3 документов с названиями продуктов: abcmilkman, abcman, человек и т. д. Вы хотите, чтобы первые два документа были возвращены в качестве результата? Если это так, то запрос sql кажется немного выключенным, я имею в виду, что он не должен «выбирать» из продуктов, где «product_name», % '+ milk +'% ''? Или у меня все получилось неправильно –

ответ

5

Я бы пошел с помощью специального анализатора, используя ngrams. Сначала нужно создать индекс, как это:

curl -XPUT 'localhost:9200/tests' -d ' 
{ 
    "settings" : { 
     "analysis" : { 
      "analyzer" : { 
       "my_analyzer" : { 
        "tokenizer" : "ngrams" 
       } 
      }, 
      "tokenizer" : { 
       "ngrams" : { 
        "type" : "nGram", 
        "min_gram" : "2", 
        "max_gram" : "10" 
       } 
      } 
     } 
    }, 
    "mappings": { 
     "test": { 
      "properties": { 
       "product_name": { 
        "type": "string", 
        "analyzer": "standard", 
        "search_analyzer": "my_analyzer" 
       } 
      } 
     } 
    } 
}' 

Затем вы можете индексировать некоторые данные:

curl -XPOST 'localhost:9200/tests/test/_bulk' -d ' 
{"index":{}} 
{"product_name": "bc"} 
{"index":{}} 
{"product_name": "cd"} 
{"index":{}} 
{"product_name": "def"} 
' 

И, наконец, вы можете найти, как этот:

curl -XPOST 'localhost:9200/tests/_search' -d '{ 
    "query": { 
     "match": { 
      "product_name": "abcde" 
     } 
    } 
}' 

И вы получите первые два документа bc и cd

+0

Спасибо, это именно то, что я искал. –

+0

Удивительный, рад, что это помогло! – Val

+1

избили меня lol @Val –

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