我正在实现简单的搜索引擎。所有数据都以 JSON 格式保存在文本文件中。我的实现方案是,如果我搜索像“rock”这样的词,方法应该返回结果作为包含“rock”值的标签 ID 列表。我一直在寻找示例代码,但在每个示例中,他们都通过类似 track_id 的标签进行搜索,但我需要搜索按值。这是我的示例 JSON 数组..
测试字:rock 预期结果:991335,991336,991337
我正在实现简单的搜索引擎。所有数据都以 JSON 格式保存在文本文件中。我的实现方案是,如果我搜索像“rock”这样的词,方法应该返回结果作为包含“rock”值的标签 ID 列表。我一直在寻找示例代码,但在每个示例中,他们都通过类似 track_id 的标签进行搜索,但我需要搜索按值。这是我的示例 JSON 数组..
测试字:rock 预期结果:991335,991336,991337
我建议使用 JSON 库,例如 Json.net。
如果您可以允许读取整个文件,那么使用 linq 非常容易。
class TrackElement {
public Track Track {get;set;}
}
class Track {
public string track_id{get;set;}
public string track_name{get;set;}
public string track_category{get;set;}
}
读取文件,反序列化和搜索:
var data = File.ReadAlltext("path/to/your/file.txt");
List<TrackElement> database = JsonConvert.DeserializeObject<List<TrackElement>>(data);
var results = database.Where(i=>i.Track.track_category.ToLower().Contains("rock")).Select(t=>t.Track.track_id);
如果数据库真的很大,您不应该将整个内容读入内存,在这种情况下您可以使用流式解析(逐个令牌),直接读取文件。为此,您可以使用 Json.net lib 中的 JsonReader 类。( http://www.newtonsoft.com/json/help/html/T_Newtonsoft_Json_JsonReader.htm )