Использование «inner_hits» с ReactiveSearch - PullRequest
0 голосов
/ 03 июля 2019

Я создаю сайт React JS, используя ReactiveSearch для извлечения данных из Elastic Search (AWS).

Я пытаюсь обеспечить поиск и выделение вложенного поля в моем эластичном поисковом индексе. Я слышал, что inner_hits - это способ включения подсветки во вложенных элементах.

Я использую customQuery prop для моего DataSearch компонента, чтобы предоставить следующий DSL-запрос.

<DataSearch
          componentId="myCustomShit"
          dataField="col_attr.completion_column_name"
          title="Column Name"
          highlight={false}
          placeholder="Enter Column Name"
          URLParams
          customQuery={(value, props) => {
            // if the search is blank then do nothing
            if (!value) return {};
            //else return a custom
            return {
              size: 15,
              from: "0",
              highlight: {
                pre_tags: ["<mark>"],
                post_tags: ["</mark>"],

                order: "score",
                fields: {
                  table_name: {},
                  rs_table_description: {},
                  user_table_description: {}
                }
              },
              query: {
                bool: {
                  should: [
                    {
                      multi_match: {
                        query: value,
                        fields: [
                          "table_name^2",
                          "user_table_description",
                          "rs_table_description"
                        ]
                      }
                    },
                    {
                      nested: {
                        path: "col_attr",
                        inner_hits: {
                          size: 10,
                          _source: true,
                          highlight: {
                            pre_tags: ["<mark>"],
                            post_tags: ["</mark>"],
                            tags_schema: "styled",
                            fragmenter: "span",
                            fragment_size: 60,
                            number_of_fragments: 2,
                            order: "score",
                            fields: {
                              "col_attr.column_name": {},
                              "col_attr.rs_column_description": {},
                              "col_attr.user_column_description": {}
                            }
                          }
                        },
                        query: {
                          bool: {
                            should: [
                              {
                                match: {
                                  "col_attr.column_name": value
                                }
                              },
                              {
                                match: {
                                  "col_attr.user_column_description": value
                                }
                              },
                              {
                                match: {
                                  "col_attr.rs_column_description": value
                                }
                              }
                            ]
                          }
                        }
                      }
                    }
                  ]
                }
              }
            };
          }}
        />

Поля данных, которые я пытаюсь найти, col_attr.rs_column_description , col_attr.user_column_description и col_attr.column_name .

Обратите внимание, что col_attr - это массив объектов, и в каждом из этих объектов расположены rs_column_description , user_column_description и column_name .


проблема

Хотя поиск, кажется, работает нормально, как и ожидалось, я заметил, что результаты выделения для вложенных полей расположены в отдельном объекте с именем inner_hits, который реактивный поиск не обрабатывает и не возвращает.

ReactiveList предоставляет доступ к параметру data, который по сути является объектом hits, возвращаемым из es.

Есть ли способ получить доступ к inner_hits? Есть ли альтернативный способ получения подсветки для вложенных элементов в реактивном поиске?

...