Apply folder restriction to fulltext only search

And update index when folder changes.
This commit is contained in:
Eike Kettner
2020-07-12 13:44:11 +02:00
parent aeba4ba913
commit 22fa1dba13
17 changed files with 183 additions and 27 deletions

View File

@ -58,7 +58,7 @@ trait FtsClient[F[_]] {
collective: Ident,
name: String
): F[Unit] =
updateIndex(logger, TextData.item(itemId, collective, Some(name), None))
updateIndex(logger, TextData.item(itemId, collective, None, Some(name), None))
def updateItemNotes(
logger: Logger[F],
@ -68,7 +68,7 @@ trait FtsClient[F[_]] {
): F[Unit] =
updateIndex(
logger,
TextData.item(itemId, collective, None, Some(notes.getOrElse("")))
TextData.item(itemId, collective, None, None, Some(notes.getOrElse("")))
)
def updateAttachmentName(
@ -84,12 +84,20 @@ trait FtsClient[F[_]] {
itemId,
attachId,
collective,
None,
Language.English,
Some(name.getOrElse("")),
None
)
)
def updateFolder(
logger: Logger[F],
itemId: Ident,
collective: Ident,
folder: Option[Ident]
): F[Unit]
def removeItem(logger: Logger[F], itemId: Ident): F[Unit]
def removeAttachment(logger: Logger[F], attachId: Ident): F[Unit]
@ -117,6 +125,14 @@ object FtsClient {
def updateIndex(logger: Logger[F], data: Stream[F, TextData]): F[Unit] =
logger.warn("Full-text search is disabled!")
def updateFolder(
logger: Logger[F],
itemId: Ident,
collective: Ident,
folder: Option[Ident]
): F[Unit] =
logger.warn("Full-text search is disabled!")
def indexData(logger: Logger[F], data: Stream[F, TextData]): F[Unit] =
logger.warn("Full-text search is disabled!")

View File

@ -10,11 +10,16 @@ import docspell.common._
* Searches must only look for given collective and in the given list
* of item ids, if it is non-empty. If the item set is empty, then
* don't restrict the result in this way.
*
* The set of folders must be used to restrict the results only to
* items that have one of the folders set or no folder set. If the
* set is empty, the restriction does not apply.
*/
final case class FtsQuery(
q: String,
collective: Ident,
items: Set[Ident],
folders: Set[Ident],
limit: Int,
offset: Int,
highlight: FtsQuery.HighlightSetting
@ -22,6 +27,9 @@ final case class FtsQuery(
def nextPage: FtsQuery =
copy(offset = limit + offset)
def withFolders(fs: Set[Ident]): FtsQuery =
copy(folders = fs)
}
object FtsQuery {

View File

@ -10,6 +10,8 @@ sealed trait TextData {
def collective: Ident
def folder: Option[Ident]
final def fold[A](f: TextData.Attachment => A, g: TextData.Item => A): A =
this match {
case a: TextData.Attachment => f(a)
@ -23,6 +25,7 @@ object TextData {
item: Ident,
attachId: Ident,
collective: Ident,
folder: Option[Ident],
lang: Language,
name: Option[String],
text: Option[String]
@ -36,15 +39,17 @@ object TextData {
item: Ident,
attachId: Ident,
collective: Ident,
folder: Option[Ident],
lang: Language,
name: Option[String],
text: Option[String]
): TextData =
Attachment(item, attachId, collective, lang, name, text)
Attachment(item, attachId, collective, folder, lang, name, text)
final case class Item(
item: Ident,
collective: Ident,
folder: Option[Ident],
name: Option[String],
notes: Option[String]
) extends TextData {
@ -56,8 +61,9 @@ object TextData {
def item(
item: Ident,
collective: Ident,
folder: Option[Ident],
name: Option[String],
notes: Option[String]
): TextData =
Item(item, collective, name, notes)
Item(item, collective, folder, name, notes)
}