14 .net c# lucene tagging lucene.net
我还没用过lucene.上次我问(几个月前,也许一年)人们建议lucene.如果我不应该使用lucene我应该使用什么?例如,有些标记的项目是这样的
如果一个用户搜索苹果我不在乎是否有1,2和4的任何偏好.但是我看到很多论坛这样做我讨厌当用户搜索苹果胡萝卜2和3有高结果而1很难找到甚至虽然它更贴近我的搜索.
此外,我希望有能力做搜索胡萝卜 - 苹果只会让我3.我不知道如果我搜索胡萝卜香蕉会发生什么,但无论如何,只要更多项目标记为2和3的结果排名较低然后1我搜索苹果胡萝卜,我会很高兴.
lucene可以这样做吗?我从哪里开始?我试着查找它,当我看到很多课程时,我会看到有关文档,网页的教程,但是当我喜欢标记某些内容时,没有人明白该做什么.如果不是lucene我应该用什么标记?
Yuv*_*l F 17
编辑:您可以使用Lucene.以下是Lucene.net中如何做到这一点的解释.Lucene的一些基础知识是:
请阅读有关创建和使用Lucene.net索引的博客文章.
我假设你正在标记博客帖子.如果我完全错了,请说出来.为了搜索标签,您需要将它们表示为Lucene实体,即"标签"字段中的标记.
这样做的一种方法是为每个博客文章分配一个Lucene文档.该文件至少包含以下字段:
索引:每当您向帖子添加标签,删除标签或编辑标签时,您都需要为帖子编制索引.分析器将字段转换为其令牌表示.
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);
Run Code Online (Sandbox Code Playgroud)
剩下的部分是检索.为此,您需要创建一个QueryParser并将其传递给查询字符串,如下所示:
QueryParser qp = new QueryParser();
Query q = qp.Parse(s);
Hits = Searcher.Search(q);
Run Code Online (Sandbox Code Playgroud)
您需要的语法是:
tags: apples tags: carrots
Run Code Online (Sandbox Code Playgroud)
寻找苹果或胡萝卜
tags: carrots NOT tags: apples
Run Code Online (Sandbox Code Playgroud)
有关构造s的详细信息,请参阅Lucene Query Parser语法.
TFD*_*TFD 14
Lucene for .net似乎很成熟.无需使用Java或SOLR
因此,如果您的Lucene索引有一个字段"tag",那么您的查询就是
tag:apple* OR tag: carrot*
Run Code Online (Sandbox Code Playgroud)
对于每个单词,这将给予相同的排名,并且对于具有两个标签的文档进行更多的排名加权
要否定标签,请使用此选项
tag:carrot* NOT tag:apple*
Run Code Online (Sandbox Code Playgroud)
在这里用Lucene显示索引和查询的简单示例
| 归档时间: |
|
| 查看次数: |
6766 次 |
| 最近记录: |