Csharp/C#教程:我如何实现标签搜索? 与lucene?分享


我如何实现标签搜索? 与lucene?

我还没用过lucene。 上次我问(几个月前,也许一年),人们建议使用lucene。 如果我不应该使用lucene我应该使用什么? 例如,有些标记的项目是这样的

  1. 苹果胡萝卜
  2. 苹果
  3. 萝卜
  4. 苹果香蕉

如果一个用户搜索苹果我不在乎是否有1,2和4的任何偏好。但是我看到很多论坛这样做我讨厌当用户搜索苹果胡萝卜2和3有高结果而1很难找到甚至虽然它更贴近我的搜索。

此外,我希望能够搜索胡萝卜 – 苹果只能得到我3.我不知道如果我搜索胡萝卜香蕉会发生什么,但不管怎样,只要更多的项目标记为2和3的结果是较低的排名然后1我搜索苹果胡萝卜,我会很高兴。

lucene可以这样做吗? 我从哪里开始? 我尝试查找它,当我看到很多课程时,我会看到有关文档,网页的教程,但是当我喜欢标记某些内容时,没有人明白该做什么。 如果不是lucene我应该用什么标记?

Lucene for .net似乎很成熟。 无需使用Java或SOLR

Lucene的标准查询语言允许同等排名的搜索词和否定词

因此,如果您的Lucene索引有一个字段“tag”,那么您的查询就是

tag:apple* OR tag: carrot* 

这将给每个单词赋予相同的排名,并且使用两个标签进行更多的排名加权

要否定标签,请使用此选项

 tag:carrot* NOT tag:apple* 

在这里用Lucene显示索引和查询的简单示例

编辑:您可以使用Lucene。 以下是Lucene.net中如何做到这一点的解释。 一些Lucene基础知识是:

请阅读有关创建和使用Lucene.net索引的博客文章 。

我假设你正在标记博客post。 如果我完全错了,请说出来。 为了搜索标签,您需要将它们表示为Lucene实体,即“标签”字段中的标记。

这样做的一种方法是为每个博客文章分配一个Lucene文档。 该文件至少包含以下字段:

索引:每当您向post添加标签,删除标签或对其进行编辑时,您都需要为post编制索引。 分析器将字段转换为其令牌表示。

 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); 

您需要的语法是:

 tags: apples tags: carrots 

寻找苹果或胡萝卜

 tags: carrots NOT tags: apples 

有关构造s的详细信息,请参阅Lucene Query Parser语法 。

上述就是C#学习教程:我如何实现标签搜索? 与lucene?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/987692.html

(0)
上一篇 2021年12月23日
下一篇 2021年12月23日

精彩推荐