Solr requestHandler SearchComponent和QueryResponseWriter

Solr.config配置文件中的Solr requestHandler SearchComponent和QueryResponseWriter

config/requestHandler : solrCore用来配置RequestHandler,转发给请求指明的handler去处理

config/queryParser : solrCore用来配置QueryParser

config/queryResponseWriter : solrCore用来配置QueryResponseWriter,如果查询有指定输出格式则到配置的QueryResponseWriter里查,没有则用默认的

config/searchComponent : solrCore用来配置SearchComponent给RequestHandler用的

config/listener : solrCore用来配置相关事件LISTENER

config/directoryFactory : solrCore用来配置DirectoryFactory

config/mainIndex/deletionPolicy : solrCore用来配置IndexDeletionPolicy

config/indexReaderFactory : solrCore用来配置IndexReaderFactory

config/updateRequestProcessorChain : solrCore用来配置UpdateRequest处理责任链

加载UpdateHandlerInfo,使用updateHandler/ @class,updateHandler/autoCommit/maxDocsupdateHandler/autoCommit/maxTime,updateHandler

/commitIntervalLowerBound实例化一个UpdateHandlerInfo : solrCore用来配置这个core的UpdateHandler

SolrRequestHandler可以自己定义,这个方法自己实现的话很难重用该类,并且需要继承standardRequestHandler,还有就是定义一个searchComponent的新功能给

requestHandler使用,requestHandler可以将这些searchComponent的组件链接起来,形成一个新的SolrRequestHandler

SearchComponent通常有:

QueryComponent http://localhost:8983/solr/select?&q=iPod&start=0&rows=10

FacetComponent http://localhost:8983/solr/select?&q=iPod&start=0&rows=10&facet=true&facet.field=inStock

MoreLikeThisComponent http://localhost:8983/solr/select?&q=iPod&start=0&rows=10&mlt=true&mlt.fl=features&mlt.count=1

HighlightComponent http://localhost:8983/solr/select?&q=iPod&start=0&rows=10&hl=true&hl.fl=name

DebugComponenthttp://localhost:8983/solr/select?&q=iPod&start=0&rows=10&debugQuery=true

SpellCheckComponent http://localhost:8983/solr/spellCheckCompRH?&q=iPood&start=0&rows=10&spellcheck=true&spellcheck.build=true

默认情况下,所有 SolrRequestHandler都附带有 QueryComponentFacetComponentMoreLikeThisComponentHighlightComponentDebugComponent。要添加自己的组件,

您需要:

假定我创建了一个名为 com.grantingersoll.MyGreatComponentSearchComponent,并让 Solr 可以使用它,而现在我想要将其插入到SolrRequestHandler中以查询它。那么我

首先需要声明该组件,如清单 2 所示,这样 Solr 才能知道如何实例化这个类:

<searchComponent name="myGreatComp" class="com.grantingersoll.MyGreatComponent"/>

显式地声明所有 SearchComponent

<requestHandler name="/greatHandler" class="solr.SearchHandler">

<arr name="components"> <str>query</str> <str>facet</str> <str>myGreatComp</str> <str>highlight</str> <str>debug</str> </arr> </requestHandler>

预先将组件添加到现有的链接上

<requestHandler name="/greatHandler" class="solr.SearchHandler"> <arr name="first-components"> <str>myGreatComp</str> </arr> </requestHandler>

将组件追加到现有链接上

<requestHandler name="/greatHandler" class="solr.SearchHandler"> <arr name="last-components"> <str>myGreatComp</str> </arr> </requestHandler>

现在,与 SearchComponent重构类似,也可以将查询解析和 SolrRequestHandler分开。因此,您可以把DismaxQParser与任何 SolrRequestHandler一起使用。您可以通过输入

defType参数来实现:http://localhost:8983/solr/select?&q=iPod&start=0&rows=10&defType=dismax&qf=name

使用 Dismax 查询解析器来解析查询,而不是标准 Lucene 查询解析器

您也可以通过扩展 QParserQParserPlugin来创建您自己的查询解析器,并让 Solr 可以使用它们,然后在 solrconfig.xml 中配置它。例如,如果我创建了

com.grantingersoll.MyGreatQParsercom.grantingersoll.MyGreatQParserPlugin,并使让 Solr 可以使用它们,那么我应该在 solrconfig.xml 中按以下方式配置它们

queryParser name="greatParser" class="com.grantingersoll.MyGreatQParserPlugin"/>

随后,我可以将 defType=greatParser键 / 值对添加到一个查询请求中,以查询这个新的解析器

MySearchHandler extends StandardRequestHandler 定制RequestHandler

MyResponseWriter  implements QueryResponseWriter

MySearchComponent extends SearchComponent 定制SearchComponent

主要就是在prepare()里获取到SolrQueryRequest里的查询query,在process()里自己处理,并且获取到前一次component处理得到的SolrQueryResponse,里面可

能会有已经排好序的查询数据集,你也可以做一些二次处理,简单过滤,重新排序等事情

自定义field type:ExampleFieldType extends SortableIntField ,将ExampleFieldType.class 放入目录webapps/solr/WEB-INF/classes/pl/solr

使用:<fieldtype name="example" class="pl.solr.ExampleFieldType" />  <field name="price" type="example" indexed="true" stored="true"/>

参考:http://blog.csdn.net/zhangshuliai/article/details/8022744

MoreLikeThisHandler查找相似商品,使用 MoreLikeThisComponent(MLT),参数mlt,mlt.count,mlt.fl,mlt.maxqt

例如:http://localhost:8983/solr/rss/select/?q=solr&version=2.2&start=0&rows=10 &indent=on&mlt=true&mlt.fl=description&mlt.fl=title&mlt.count=3

提供拼写建议:首先,模式必须先声明一个 Field和一个相关联的、其内容能够发挥拼写词典的作用的 FieldType。按常规,该FieldType的分析过程要保持简单,而且不要派

生词语或修改其他标志。我的样例 FieldType声明了它的 <analyzer>

<fieldType name="textSpell" class="solr.TextField" positionIncrementGap="100" > <analyzer> <tokenizer class="solr.StandardTokenizerFactory"/> <filter

class="solr.LowerCaseFilterFactory"/> <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> </analyzer> </fieldType>

<analyzer>负责基本的标志化(尤其是拆分空格),然后将标志变成小写并移除复制。不用派生词语,也不用扩展同义词。就是这么简单。接下来我在 schema.xml 文件中

声明了一个 field,名为 spell,它使用 textSpell <fieldType>。接着,我声明了<searchComponent>,将 solrconfig.xml 文件中的必要的部分连接起来,

<searchComponent name="spellcheck" class="solr.SpellCheckComponent"> <str name="queryAnalyzerFieldType">textSpell</str> <lst name="spellchecker"> <str

name="name">default</str> <str name="field">spell</str> <str name="spellcheckIndexDir">./spellcheckerDefault</str> </lst> </searchComponent>

http://localhost:8983/solr/rss/select/?q=holr&spellcheck=true

再深入一步,多个词语的查询也可以使用拼写检查。组件甚至能够自动地创建一个推荐的新查询,该查询将所有词语的最佳建议结合起来。这可以通过添加

spellcheck.collate=true参数来实现。就像在错误拼写查询中一样,http://localhost:8983/solr/rss/select/?q=holr+foo&spellcheck=true&indent=on &spellcheck.collate=true

它生成了作为建议的一部分的结果 <str name="collation">solr for</str>。但是要注意,这个合并的结果可能不会返回结果,这取决于您是否用AND将查询词语连接起来

另外,拼写检查器还能采用与返回的建议数量和结果质量有关的查询参数。要想更多地了解 SpellCheckComponent的详细信息,spellings.txt也可以指定自定义的词组

编辑结果顺序

Solr 使用一个神秘命名的 SearchComponent(即 QueryElevationComponent)实现了简单排名。为了在样例应用程序中配置它,

<searchComponent name="elevator" class="org.apache.solr.handler.component.QueryElevationComponent" > <!-- pick a fieldType to analyze queries --> <str

name="queryFieldType">string</str> <str name="config-file">elevate.xml</str> </searchComponent>

queryFieldType属性指定如何将传入的查询与要提升的查询相匹配。为简单起见,string FieldType意味着查询必须是一个精确匹配的字符串,因为在string FieldType上是

不会执行任何分析的。config-file属性指定包含查询和相关联的结果的文件。它储存在一个单独的文件中,这样才能够从外部编辑它。文件必须位于 Solr 配置目录中或 Solr

数据目录中。如果它不在数据目录中,那么它会在 Solr 需要重新装载索引时再载入。

样例应用程序将 elevate.xml 储存在配置目录中

 <query text="sony">
   <doc id="000037" />  <!-- put the actual ipod at the top -->当搜索sony的时候将000037放在第一位,并将006621排除在外
   <doc id="006621" exclude="true" /> <!-- exclude this cable -->
 </query>

http://localhost:8983/solr/rss/select/?q=Solr&version=2.2&start=0&rows=10&indent=on &fl=link&enableElevation=false

<requestHandler name= "/elevate"   class = "solr.SearchHandler"  startup= "lazy" >  

<arr name="last-components">   

   <str>elevator</str>

</arr>

高亮(highlight)请求中需要两个参数"hl=true"和"hl.fl=name",前者开启高亮,后者告诉需要高亮的name字段,也可以对多个字段进行高亮,可以添加多个字段,字段间逗号隔开

如hl.fl=name,name2,name3

http://localhost:8080/solr/select?q=name:王麻子&start=0&rows=10&hl=true&hl.fl=name

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值