Как хранить и индексировать вывод Draft.js в базах данных?

Какой самый эффективный способ выполнить индексацию для полнотекстового поиска?

Я использую mongodb, но я думаю, что это не так важно в контексте этого вопроса

Я думаю о двух способах сохранения выходных данных draft.js с дальнейшей индексацией:

  1. Преобразуйте это в уценку. Это выглядит просто, индексация полнотекстового поиска достаточно умна, чтобы отфильтровать все символы мусора во время индексации. Однако, если уценка будет такой хорошей, draft.js, скорее всего, выведет данные в виде уценки вместо структуры блоков. Поэтому, я думаю, должно быть преимущество от хранения блоков как есть.
  2. Хранить блоки после JSON.stringify и сохраните все "текстовые" свойства каждого блока как обычный текст в отдельном свойстве документа (или столбце таблицы для sql). Таким образом, простой текст будет там только для индексации, а остальная часть работы будет выполняться с помощью stringified/parsed JSON. Звучит излишне сложно, если честно.

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

Вот несколько примеров, которые будут конкретны:

Пример редактора draftjs

Пример текста:

<p>First line of text</p>
<h1>A header</h1>
<p>text and one <strong>BOLD</strong> word</p>

Вывод Draft.js:

{  
   "entityMap":{  

   },
   "blocks":[  
      {  
         "key":"4vno8",
         "text":"First line of text",
         "type":"unstyled",
         "depth":0,
         "inlineStyleRanges":[  

         ],
         "entityRanges":[  

         ],
         "data":{  

         }
      },
      {  
         "key":"dr3c5",
         "text":"A header",
         "type":"header-one",
         "depth":0,
         "inlineStyleRanges":[  

         ],
         "entityRanges":[  

         ],
         "data":{  

         }
      },
      {  
         "key":"c5ndf",
         "text":"text and one BOLD word",
         "type":"unstyled",
         "depth":0,
         "inlineStyleRanges":[  
            {  
               "offset":13,
               "length":4,
               "style":"BOLD"
            }
         ],
         "entityRanges":[  

         ],
         "data":{  

         }
      }
   ]
}

1 ответ

Сохраняя необработанный блок, делайте любую необходимую индексацию. Текстовые части в сырых блоках очень просты, поэтому их можно обрабатывать на любом языке программирования.

Другие вопросы по тегам