如何搜索具有某种联接的文档
本文关键字:文档 何搜索 搜索 | 更新日期: 2023-09-27 18:32:01
在我上一个问题旁边。我现在想执行 lucene 查询搜索。
这是我的模型:
public class User
{
public string Id { get; set; }
public string Email { get; set; }
public string Password { get; set; }
}
public class Book
{
public string Id { get; set; }
public string Title { get; set; }
}
public class BookFavorite
{
public string Id { get; set; }
public string UserId { get; set; }
public string BookId { get; set; }
}
因此,我想搜索书籍的"标题"字段,但仅限于收藏夹中的书籍。所以我需要在 Book 和 BookFavorite 和索引标题字段之间建立一种连接。
我尝试过使用MultiMap Index,但我发现很难让它工作。
有什么帮助吗?谢谢。
编辑:多地图索引
public class BookFavoriteSearchIndex : AbstractMultiMapIndexCreationTask<BookFavoriteSearchIndex.ReduceResult>
{
public class ReduceResult
{
public string BookId { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public string Abstract { get; set; }
public string Tag { get; set; }
}
public BookFavoriteSearchIndex()
{
AddMap<Book>(books => from book in books
from tag in book.Tags
select new
{
BookId = book.Id,
Title = book.Title,
Description = book.Description,
Abstract = book.Abstract,
Tag = tag
});
AddMap<BookFavorite>(bfs => from bf in bfs
select new
{
BookId = bf.BookId,
Title = (string)null,
Description = (string)null,
Abstract = (string)null,
Tag = (string)null
});
Reduce = results => from result in results
group result by result.BookId
into g
select new
{
BookId = g.Key,
Title = g.Select(x => x.Title).FirstOrDefault(x => x != null),
Description = g.Select(x => x.Description).FirstOrDefault(x => x != null),
Abstract = g.Select(x => x.Abstract).FirstOrDefault(x => x != null),
Tag = g.Select(x => x.Tag).FirstOrDefault(x => x != null),
};
}
}
书名不会经常更改,那么为什么不在BookFavourite
中包含Title
,如下所示:
public class BookFavorite
{
public string Id { get; set; }
public string UserId { get; set; }
public string BookTitle { get; set; }
}
然后,您可以只查询BookFavourite
对象中的BookTitle
。
您将复制数据,但它是不会更改的数据,因此您不必担心更新它。
更新(根据额外信息)
在 Book
类中存储 IsFavourite
字段,然后可以在查询中使用它怎么样?您只需要维护此字段,因为书籍是"收藏夹"。
public class Book
{
public string Id { get; set; }
public string Title { get; set; }
public bool IsFavourite { get; set; }
}
我相信
这个答案应该可以解决您在我提出的类似问题中链接 Book 和 BookFavorite 的问题:链接
编辑:它假设您的书和书收藏夹包含在单独的列表中