2015-03-28 2 views
0

У меня есть документ формыищет поддокумент в упругом поиске

'search': 
[ 
    { 
     id:'1', 
     "content": [ 
      { 
       "text": "random text .....", 
       "time": 150.023 
      }, 
      { 
       "text": "random text .....", 
       "time": 160.023 
      } 
      ] 
    }, 

    { 
     id:'2', 
     "content": [ 
      { 
       "text": "random text .....", 
       "time": 150.023 
      }, 
      { 
       "text": "random text .....", 
       "time": 160.023 
      } 
      ] 
    } 
    . 
    . 
    . 
] 

Я хочу искать на текстовом поле и получить его идентификатор, текст и время, например

моего образца документ и поиск индекса выглядит ниже

'search': 
[ 
    { 
     id:'1', 
     "content": [ 
      { 
       "text": "Algorithm and Data structure", 
       "time": 150.023 
      }, 
      { 
       "text": "Selection Sort", 
       "time": 160.023 
      } 
      ] 
    }, 

    { 
     id:'2', 
     "content": [ 
      { 
       "text": "Database and schema", 
       "time": 1530.023 
      } 
      ] 
    } 
    . 
    . 
    . 
] 

теперь, когда я искать «текст: Алгоритм», то мне нужно ID: «1», «текст»: «структура алгоритма и данных» и «время»: 150.023.

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

ответ

1

В поиске elastics поиск осуществляется на каждый документ. Вы можете получать определенные поля только в поиске, но не так, как вы ищете в массиве. Лучшим решением здесь было бы объявить поле поиска как nested, чтобы вы могли выполнить поиск по конкретным элементам, а затем получить весь документ, а затем получить элемент, который вы ищете на стороне клиента.

ИЛИ, вы можете изменить моделирование данных и моделировать документ вокруг элемента поиска.

Это означает, что вместо того, чтобы поддерживать единый документ, как -

'search': 
[ 
    { 
     id:'1', 
     "content": [ 
      { 
       "text": "random text .....", 
       "time": 150.023 
      }, 
      { 
       "text": "random text .....", 
       "time": 160.023 
      } 
      ] 
    }, 

    { 
     id:'2', 
     "content": [ 
      { 
       "text": "random text .....", 
       "time": 150.023 
      }, 
      { 
       "text": "random text .....", 
       "time": 160.023 
      } 
      ] 
    } 
    . 
    . 
    . 
] 

Вы можете сохранить модель несколько документов в документе выше, где один документ выглядит -

{ 
    "id": "1", 
    "content": { 
    "text": "random text .....", 
    "time": 150.023 
    } 
} 
Смежные вопросы