2015-06-02 2 views
0

После прочтения и пытается несколько статей и не получив никакого результата ..Elasticsearch построить индекс сервера SQL и создать поисковый запрос failes

Я хочу создать и elasticsearch запрос, который возвращает базу данных результатов

Пример:

[Шаг 1]: мой дб [my_db] и мое имя таблицы [my_table] построить новый индекс на localho й: 9200

POST /my_index/my_type/_meta 
{ 
    "type":"jdbc", 
    "jdbc": 
    { 
     "driver":"com.microsoft.sqlserver.jdbc.SQLServerDriver", 
     "url":"jdbc:sqlserver://[my_db_ip];databaseName=[my_db]", 
     "user":"sa","password":"xxxxxx", 
     "sql":"SELECT * FROM [my_table]", 
     "poll":"5s", 
     "index": "my_index", 
     "type": "my_type"  
    } 
} 

В результате создания индекса:

{ 
    "_index": "my_index", 
    "_type": "my_type", 
    "_id": "_meta", 
    "_version": 1, 
    "created": true 
} 

[Стади 2]: поиска результат запроса

POST /my_index/_search 
{ 
    "query_string" : { 
     "query" : "FreeText" 
    } 
} 

Поиск

{ 
    "error": "SearchPhaseExecutionException[Failed to execute phase [query], all shards failed; shardFailures.... 
} 

Что случилось с моим поисковым запросом ???

Как я могу создать запрос, который возвращает результаты из [my_table] строк?

ответ

0

Попробуйте выполнить запрос match_all (см. here для официальной документации). Это принесет вам все результаты my_type.

Пример:

POST /my_index/my_type/_search 
{ 
    "query": { "match_all": {} } 
} 

Если вам нужно найти какой-то определенный срок, то вы должны обратить внимание на mappings вашего типа и query type, которые вы будете использовать.

Update

Отображение:

Из Схемы таблицы Я понимаю, что ниже отображение для my_type подойдет вам хорошо.

{ 
    "my_table" : { 
     "properties" : { 
      "orderid" : {"type" : "integer", "index" : "not_analyzed"}, 
      "ordername " : {"type" : "string" } 
     } 
    } 
} 

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

Вообще я предлагаю вам следовать ниже методике:

  1. Создать свой индекс с настройками индекса, что вам нужно
  2. Определение отображения вашего типа Index
  3. Ваши данные

Не смешивайте все эти шаги в одном и не оставляйте вещи в удаче (например, сопоставления по умолчанию).

Вы можете использовать match query для поиска данных поля на документе.

Пример

POST /my_index/my_type/_search 
{ 
    "query": { 
     "match": { 
      "FIELD": "TEXT" 
     } 
    } 
} 

Вы можете использовать multi-match query для того, чтобы искать данные из нескольких полей документа.

Пример

POST /my_index/my_type/_search 
{ 
    "query": { 
     "multi_match": { 
      "query": "TEXT", 
      "fields": [ "field1", "field2" ] 
     } 
    } 
} 

Дополнительные опции запрашивая проверить официальную документацию по Query DSL.

+0

Но где же результат выбора? Я хочу искать строки на [my_table], который содержит текст «FreeText». – shay

+0

См. Мой обновленный ответ. – Manolis

+0

POST/my_index/my_type/_search \t { \t \t "запрос": { \t \t \t "multi_match": { \t \t \t "запрос": "8304869", \t \t \t "полей": [ " OrderID»] \t \t \t} \t \t} не найдено \t} // никаких результатов \t { \t "взял": 5, \t "timed_out": ложные, \t "_shards": { \t \t "всего": 5, \t \t "успешно": 5, \t \t "не удалось" : 0 \t}, \t "хиты": { \t \t "всего": 0, \t \t "max_score": нулевой, \t \t "hits": [] \t} \t} – shay

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