Как хранить и индексировать вывод Draft.js в базах данных?
Какой самый эффективный способ выполнить индексацию для полнотекстового поиска?
Я использую mongodb, но я думаю, что это не так важно в контексте этого вопроса
Я думаю о двух способах сохранения выходных данных draft.js с дальнейшей индексацией:
- Преобразуйте это в уценку. Это выглядит просто, индексация полнотекстового поиска достаточно умна, чтобы отфильтровать все символы мусора во время индексации. Однако, если уценка будет такой хорошей, draft.js, скорее всего, выведет данные в виде уценки вместо структуры блоков. Поэтому, я думаю, должно быть преимущество от хранения блоков как есть.
- Хранить блоки после
JSON.stringify
и сохраните все "текстовые" свойства каждого блока как обычный текст в отдельном свойстве документа (или столбце таблицы для sql). Таким образом, простой текст будет там только для индексации, а остальная часть работы будет выполняться с помощью stringified/parsed JSON. Звучит излишне сложно, если честно.
Если вы, ребята, уже сталкивались с такой ситуацией, возможно, у вас есть несколько точных советов о том, как хранить и индексировать эти данные?
Вот несколько примеров, которые будут конкретны:
Пример текста:
<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 ответ
Сохраняя необработанный блок, делайте любую необходимую индексацию. Текстовые части в сырых блоках очень просты, поэтому их можно обрабатывать на любом языке программирования.