Solr高亮查询例子

前言

在使用solr做索引查询过程中,需要对查询字段的命中文本做高亮显示。要实现这个效果,在solr中只需要作很少的配置就能实现。下面我们就在我们项目中实践一下吧

如何实现

需要在solrconfig.xml配置文件中加一个配置项,如下:


  
  
     explicit
  

  query
  stats
  debug
  highlight


然后,使用solrj对服务端进行查询,代码如下:

import java.net.URL;
import java.util.List;
import java.util.Map;

import junit.framework.TestCase;

import org.apache.solr.client.solrj.SolrQuery;
import org.apache.solr.client.solrj.SolrRequest.METHOD;
import org.apache.solr.client.solrj.impl.CommonsHttpSolrServer;
import org.apache.solr.client.solrj.response.QueryResponse;

import com.taobao.terminator.manage.common.solr.GeneralXMLResponseParser;

public class TestHighlight extends TestCase {
	public void testHighLight() throws Exception {

		// String apply =
		// "http://10.235.160.178:8080/terminator-search/search4product-0";
		String apply = "http://10.235.160.77:8080/terminator-search/search4barbarian-0";

		CommonsHttpSolrServer solr = new CommonsHttpSolrServer(new URL(apply),
				null, new GeneralXMLResponseParser(), false);

		SolrQuery criteria = new SolrQuery();
		criteria.setHighlight(true);
		criteria.setHighlightFragsize(150);
		criteria.addHighlightField("item_title");

		// criteria.addHighlightField("title");

		criteria.setHighlightSimplePre("");
		criteria.setHighlightSimplePost("");

		criteria.setQuery("item_title:童装");

		// criteria.setQuery("title:重庆");

		QueryResponse result = solr.query(criteria, METHOD.POST);

		// SolrDocumentList solrDocumentList = result.getResults();

		Map>> highlightresult = result
				.getHighlighting();

		for (Map.Entry>> entry : highlightresult
				.entrySet()) {
			System.out.println();
			// System.out.print("item_key:" + entry.getKey());

			for (Map.Entry> value : entry.getValue()
					.entrySet()) {
				System.out.print("item_name:" + value.getKey() + ": ");
				for (String v : value.getValue()) {
					System.out.print(v + ",");
				}
			}

		}

	}
}

总结

高亮查询的参数设置

由于solrj查询是使用http作为传输协议的,所有有关高亮查询的参数会在url上以参数的方式设置的,例如: http://10.235.160.77:8080/terminator-search/search4barbarian-0/select/?q=item_title%3A1121093&version=2.2&start=0&rows=10&indent=on&hl=true&hl.fl=item_title  在这个查询url上添加了,“hl”和"hl.fl" 这两个参数来实现高亮查询的需求。

首先需要打开高亮查询的开关,需要执行criteria.setHighlight(true)(对应的是hl 这个参数),另外和高亮查询相关的查询参数还有以下这些

  1. hl.fl  需要显示高亮的字段,例如模糊查询的字段是item_title,并且在查询结果中要显示item_title字段中高亮显示的内容,所以就要设置hl.fl=item_title 这个属性
  2. hl.snippets
  3. hl.fragsize
  4. hl.increment
  5. hl.maxAnalyzedChars
  6. hl.formatter
  7. hl.fragmenter
  8. hl.requireFieldMatch
  9. hl.simple.pre   如果高亮结果是在html页面显示的,所以就需要设置这个和hl.simple.post 两个参数,来实现高亮,比如查询item_title:童装,那么要实现在结果文本中有“童装” 这个词的地方前后要添加童装 这样的标签,那就需要设置hl.simple.pre=,hl.simple.post=
  10. hl.simple.post





















你可能感兴趣的:(消息中间件)