目前我正试图让搜索功能查询工作。我正在搜索一张名为" track"我的输入是一个搜索字段。 曲目表有:标题,艺术家和专辑。我能够搜索" michael jackson"作为艺术家或"击败它"会工作,但我不能让它工作"迈克尔杰克逊击败它"所以我低音希望它能同时搜索标题和艺术家。 我当前的查询
Db.From<Track>()
.Where(q => q.Title.Contains(request.Trackname) ||
q.Artist.Contains(request.Trackname) ||
q.Album.Contains(request.Trackname))
.Limit(20);
会提供一些帮助
答案 0 :(得分:1)
您基本上需要拆分用户输入的搜索关键字的每个单词,然后单独搜索,
还需要使用Distinct
来消除重复记录
var searchStrings = request.TrackName.Split(' ').ToList();
Db.From<Track>()
.Where(q =>
request.TrackName.Equals(q.Album) ||
request.TrackName.Equals(q.Artist) ||
request.TrackName.Equals(q.Title) ||
request.TrackName.IndexOf(q.Album) > 0 ||
request.TrackName.IndexOf(q.Artist) > 0 ||
request.TrackName.IndexOf(q.Title) > 0 ||
searchStrings.Any(x => x.Equals(q.Title)) ||
searchStrings.Any(x => x.Equals(q.Artist)) ||
searchStrings.Any(x => x.Equals(q.Album)))
.Distinct()
.Limit(20);
答案 1 :(得分:1)
您可以通过这种方式获得最期望的结果,
拆分输入搜索,然后将其与标题,艺术家,专辑匹配。
string search ="michael jackson beat it";
var searchKeys = search.split(' ');
Db.From<Track>()
.Where(q => q.Title.Contains(request.Trackname) ||
q.Artist.Contains(request.Trackname) ||
q.Album.Contains(request.Trackname)) ||
searchKeys.Contains(q.Album) ||
searchKeys.Contains(q.Artist) ||
searchKeys.Contains(q.Title) ||
Array.Exists(searchKeys, z=> q.Title.Contains(z)) ||
Array.Exists(searchKeys, z=> q.Artist.Contains(z)) ||
Array.Exists(searchKeys, z=> q.Album.Contains(z))
.Limit(20);
如果用户搜索如下所示,它将以任一方式为您提供结果: