用的ik分词器
所在core的solrconfig.xml部分配置
<requestHandler name="/select" class="solr.SearchHandler"> <lst name="defaults"> <str name="echoParams">explicit</str> <int name="rows">10</int> <str name="defType">edismax</str> <str name="qf">name^20 descripe^2 text ^2</str> <str name="hl.usePhraseHighlighter">false</str> <str name="hl.useFastVectorHighlighter">true</str> <str name="hl.boundaryScanner">breakIterator</str> <str name="hl.encoder">html</str> <str name="hl.formatter">htmla</str> </lst> </requestHandler> <searchComponent class="solr.HighlightComponent" name="highlight"> <highlighting> <formatter name="htmla" default="true" class="solr.highlight.HtmlFormatter"> <lst name="defaults"> <str name="hl.simple.pre"><![CDATA[<b>]]></str> <str name="hl.simple.post"><![CDATA[</b>]]></str> </lst> </formatter> <encoder name="html" class="solr.highlight.HtmlEncoder" /> <boundaryScanner name="default" default="false" class="solr.highlight.SimpleBoundaryScanner"> <lst name="defaults"> <str name="hl.bs.maxScan">10</str> <str name="hl.bs.chars">.,!? </str> </lst> </boundaryScanner> <boundaryScanner name="breakIterator" default="true" class="solr.highlight.BreakIteratorBoundaryScanner"> <lst name="defaults"> <str name="hl.bs.type">SENTENCE</str> </lst> </boundaryScanner> </highlighting> </searchComponent>
所在core的schema.xml部分配置
<field name="text" type="text_ik" indexed="true" stored="true" omitNorms="true" termVectors="true" termPositions="true" termOffsets="true"/> <field name="name" type="text_ik" indexed="true" stored="true" omitNorms="true" termVectors="true" termPositions="true" termOffsets="true"/> <field name="descripe" type="text_ik" indexed="true" stored="true" omitNorms="true" termVectors="true" termPositions="true" termOffsets="true"/>
用solrquery查询 版本是5.4.1
StringBuilder params = new StringBuilder(); params.append("name:测试 OR descripe:测试 OR text:测试"); SolrQuery sq = new SolrQuery(); sq.setHighlight(true); sq.setQuery(params.toString()); sq.set("defType","dismax"); sq.setStart(1); sq.setRows(20);//每一页多少值 sq.setHighlightFragsize(20);//分片大小 sq.setHighlightSnippets(1); sq.setRequestHandler("/select"); sq.set("fl", "*,score"); sq.addSort(new SortClause("score", ORDER.desc)); // 排序
HttpSolrClient hsc = new HttpSolrClient("http://地址:端口/solr/bookCore");
几个关键点
hl.usePhraseHighlighter
hl.useFastVectorHighlighter
<str name="defType">edismax</str>
<str name="qf">name^20 descripe^2 text ^2</str>(^后面是分值)
<str name="hl.boundaryScanner">breakIterator</str>
这个参数的意思,网上有很多,这里就不介绍了