编辑:您可以使用 Lucene。以下是如何在 Lucene.net 中执行此操作的说明。一些 Lucene 基础知识是:
- Document - 是 Lucene 中的存储单元。它有点类似于数据库记录。
- Field - Lucene 中的搜索单元。类似于数据库列。Lucene 通过查询和匹配字段来搜索文本。应为字段编制索引以启用搜索。
- Token - Lucene 中的搜索原子。通常是一个词,有时是一个短语、字母或数字。
- Analyzer - Lucene 将字段转换为标记的部分。
请阅读这篇关于创建和使用 Lucene.net 索引的博文。
我假设您正在标记博客文章。如果我完全错了,请直说。为了搜索标签,您需要将它们表示为 Lucene 实体,即作为“标签”字段中的标记。
这样做的一种方法是为每篇博文分配一个 Lucene 文档。该文档将至少包含以下字段:
- id:博客文章的唯一 ID。
- 内容:博客文章的文本。
- 标签:标签列表。
索引:每当您向帖子添加标签、删除标签或对其进行编辑时,您都需要为帖子编制索引。分析器会将字段转换为它们的标记表示。
Document doc = new Document();
doc.Add(new Field("id", i.ToString(), Field.Store.YES, Field.Index.NO));
doc.Add(new Field("content", text, Field.Store.YES, Field.Index.TOKENIZED));
doc.Add(new Field("tags", tags, Field.Store.YES, Field.Index.TOKENIZED));
writer.AddDocument(doc);
剩下的部分是检索。为此,您需要创建一个QueryParser并向其传递一个查询字符串,如下所示:
QueryParser qp = new QueryParser();
Query q = qp.Parse(s);
Hits = Searcher.Search(q);
您需要的 s 语法将是:
tags: apples tags: carrots
搜索苹果或胡萝卜
tags: carrots NOT tags: apples
有关构造 s 的详细信息,请参阅Lucene 查询解析器语法。