Lucene的Highlighter如何才能将不分词直接索引的字段加高亮?

问题描述

【背景】 用户要求输入文章的完整标题也能将该文章完整检索下来,如“商海里穿梭的鱼:偷懒的6条原则”。【我的想法】 在设计时多加一个字段用于对文章的标题不分词直接索引,这样就能实现用户要求的功能。但由于要结合Highlighter将用户输入的短语用标签对<font></font>高亮显示,而Highlighter的getBestFragment()方法又必须要使用分词器或Token进行分词,这样把标题分词后就导致无法对整个文章标题加高亮了。 对于这个问题,虽然可以在做页面时给完整的文章标题可以手工添加高亮标签对<font></font>,但这样会带来一些麻烦,如代码变得很不协调,更糟糕的是可能会出现这样的情况:用户选择以文章的完整标题作为输入,且标题是“暧昧”,而“暧昧”本身就是一个分词单元,这样就会产生<font color='red'><font color='red'>暧昧</fong></font>的标签对嵌套(内层标签对是高亮器自动添加的,外层的则是在页面输出时手工添加的)。请问对于这个问题,有什么比较好的解决方法呢? 问题补充:beneo 写道

解决方案

引用不知道这算不算停用词了,比如说我输入标题(歌曲名)是“泳儿 - 小蛮腰”,最后分词得到的结果只有“泳”“蛮腰”,而“儿”“小”却没有分出来。所以最后高亮的结果是<font>泳</font>儿 - 小<font>蛮腰</font>。但我需要的是高亮成“<font>泳儿 - 小蛮腰</font>”呀。。这明显有stop word,你换一个没有stop-word的分词就好了,或者你把stop word的词典给删掉。
解决方案二:
楼主你的问题解决了吗!我也想问这个问题!不知道能否加下q:289270219!指导下!
解决方案三:
刚试了一下,用布尔查询的确可以把完整标题给搜出来。只是这种方法始终是基于一个个分词的查询,所以最后的高亮还是以分词为单位,标题中不属于分词的还是无法高亮呢~ 我只能说你的分词有些问题,可能你有stop word比方说“中华人民的共和国”这句是标题,你搜索中华人民的共和国你分词后是 中华|人民|的|共和国所有分词结果都occur.MUST的话,那结果高亮的就是“中华人民的共和国”,不是么?
解决方案四:
引用就是说,将整个完整的标题分出一个个token,然后将这些token用occur.MUST组合成布尔查询来查询标题对应的document? 是的。你不分词也可以,如果你的量不大的话
解决方案五:
引用solr能支持对不分词的索引字段进行全部高亮?? 首先,“分词后不能搜索到完整字句”这个理解是错误的。当然你不分词直接存储也是可以的,只要你的量不是很大分词后还是可以搜索到完整字句的,只要occur.MUST就可以了。此外,solr支持高亮
解决方案六:
用户要求输入文章的完整标题也能将该文章完整检索下来,如“商海里穿梭的鱼:偷懒的6条原则”。 为什么会认为,用户输入完整的字句,lucene就无法搜索的到呢??http://lucene.apache.org/solr/能够满足你的highlighting

时间: 2024-09-19 08:15:16

Lucene的Highlighter如何才能将不分词直接索引的字段加高亮?的相关文章

Lucene.Net 2.3.1开发介绍 —— 三、索引(三)

原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(三) 3.Field配置所产生的效果  索引数据,简单的代码,只要两个方法就搞定了,而在索引过程中用到的一些类里最简单,作用也不小的就是Field,接下来看看Field的各项设置都会有什么样的效果. 代码 3.1   Code 1/**//// <summary> 2/// 索引数据 3/// </summary> 4private void Index() 5{ 6    Analyzer analyzer = ne

Lucene.Net 2.3.1开发介绍 —— 三、索引(五)

原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(五) 话接上篇,继续来说权重对排序的影响.从上面的4个测试,只能说是有个直观的理解了."哦,是!调整权重是能影响排序了,但是好像没办法来分析到底怎么调啊!".似乎是这样,现在需要把问题放大,加大索引的内容.到博客园新闻区,用zzk找了4篇内容包含"测试"的文章.代码变成 2.1.5 代码2.1.5  1using System;  2using System.Collections.Generic;  

Lucene.Net 2.3.1开发介绍 —— 三、索引(四)

原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(四) 4.索引对搜索排序的影响   搜索的时候,同一个搜索关键字和同一份索引,决定了一个结果,不但决定了结果的集合,也确定了结果的顺序.那个这个结果是怎么得出来的?这个顺序又是怎么排的呢?这两个问题不是本节讨论的重点,但是这两个问题却关系到本节要讨论的,索引对结果的影响问题.在不使用字段排序的情况下,Lucene.Net默认是按文档的得分来排序的,这个公式看着很复杂,感觉像是大学时高数书上的那些个公式,其实说清楚了也简单. 关于文档

Lucene.Net 2.3.1开发介绍 —— 三、索引(一)

原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(一) 在说索引之前,先说说索引是什么?为什么要索引?怎么索引?   先想想看,假如现在有一个文本,我们会怎么去搜索.比如,有一个string = "abcdefghijklmnopqrstuvwxyz",这都是26个字母.现在要看看里面是不是有a,用IndexOf就可以很方便实现.现在数据量大了,在数据库里已经有100多条数据了,当然,利用数据库提供的操作方法,也可以很方便的查找.而这里先抛开数据库,把这100多条记录放到

Lucene.Net 2.3.1开发介绍 —— 三、索引(二)

原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(二) 2.索引中用到的核心类 在Lucene.Net索引开发中,用到的类不多,这些类是索引过程的核心类.其中Analyzer是索引建立的基础,Directory是索引建立中或者建立好存储的介质,Document和Field类是逻辑结构的核心,IndexWriter是操作的核心.其他类的使用都被隐藏掉了,这也是为什么Lucene.Net使用这么方便的原因.   2.1 Analyzer 前面已经对Analyzer进行了很详细的讲解,A

Lucene.Net 2.3.1开发介绍 —— 三、索引(六)

原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(六) 2.2 Field的Boost 如果说Document的Boost是一条线,那么Field的Boost则是一个点.怎么理解这个点呢?设置Document的Boost会影响所有字段.在搜索的过程中,一般至少会搜索两个Field,比如同时搜索标题和内容.而Document的Boost将同时影响标题和内容的搜索得分,但是设置Field的Boost则不会有那么大的影响,Field的Boost只会影响一个点.那这个点有什么用呢?   现

Lucene.Net 2.3.1开发介绍 —— 三、索引(七)

原文:Lucene.Net 2.3.1开发介绍 -- 三.索引(七) 5.IndexWriter 索引这部分最后讲的是IndexWriter.如果说前面提到的都是数据的结构,那么IndexWriter就是业务的封装.无论述Document,Field还是看不见的Segment,Term都是对数据存储逻辑的抽象,IndexWriter包装了操作的过程. 当然,这里不会讨论IndexWriter的每个细节,这里主要介绍IndexWriter的常用法和实际使用中遇到的部署问题. 5.1 IndexWr

Lucene 3.6.2入门(4) 中文分词器

package com.jadyer.lucene; import java.io.IOException; import java.io.StringReader; import org.apache.lucene.analysis.Analyzer; import org.apache.lucene.analysis.SimpleAnalyzer; import org.apache.lucene.analysis.StopAnalyzer; import org.apache.lucene

怎么样才能winform中的下拉列表选中一个字段页面变换一次??

问题描述 求大神解答啊!!!!!!!!最好是比较全的代码c#的 解决方案 解决方案二:onchange事件中变就是了,有啥搞不明白的解决方案三:在下拉框的SelectIndexChanged事件添加"页面变换"的代码.