我有一个java程序在solr服务器中发出请求。我创建了一个触发solr分析服务的查询:
HttpSolrClient server = new
HttpSolrClient("http://localhost:8983/solr/docs");
SolrQuery query = new SolrQuery();
query.setRequestHandler("/analysis/field");
query.set("analysis.fieldtype", "text_en");
query.set("analysis.fieldvalue", "TESTS");
query.set("wt", "json");
我得到的回应是这样的:
{responseHeader={status=0,QTime=2},analysis={field_types={text_en={index={org.apache.lucene.analysis.standard.StandardTokenizer=[{text=TESTS,raw_bytes=[54 45 53 54 53],start=0,end=5,org.apache.lucene.analysis.tokenattributes.PositionLengthAttribute#positionLength=1,type=<ALPHANUM>,position=1,positionHistory=[1]}],org.apache.lucene.analysis.core.StopFilter=[{text=TESTS,raw_bytes=[54 45 53 54 53],start=0,end=5,org.apache.lucene.analysis.tokenattributes.PositionLengthAttribute#positionLength=1,type=<ALPHANUM>,position=1,positionHistory=[1, 1]}],org.apache.lucene.analysis.core.LowerCaseFilter=[{text=tests,raw_bytes=[74 65 73 74 73],start=0,end=5,org.apache.lucene.analysis.tokenattributes.PositionLengthAttribute#positionLength=1,type=<ALPHANUM>,position=1,positionHistory=[1, 1, 1]}],org.apache.lucene.analysis.en.EnglishPossessiveFilter=[{text=tests,raw_bytes=[74 65 73 74 73],start=0,end=5,org.apache.lucene.analysis.tokenattributes.PositionLengthAttribute#positionLength=1,type=<ALPHANUM>,position=1,positionHistory=[1, 1, 1, 1]}],org.apache.lucene.analysis.miscellaneous.SetKeywordMarkerFilter=[{text=tests,raw_bytes=[74 65 73 74 73],start=0,end=5,org.apache.lucene.analysis.tokenattributes.PositionLengthAttribute#positionLength=1,type=<ALPHANUM>,position=1,positionHistory=[1, 1, 1, 1, 1],org.apache.lucene.analysis.tokenattributes.KeywordAttribute#keyword=false}],org.apache.lucene.analysis.en.PorterStemFilter=[{text=test,raw_bytes=[74 65 73 74],start=0,end=5,org.apache.lucene.analysis.tokenattributes.PositionLengthAttribute#positionLength=1,type=<ALPHANUM>,position=1,positionHistory=[1, 1, 1, 1, 1, 1],org.apache.lucene.analysis.tokenattributes.KeywordAttribute#keyword=false}]}}},field_names={}}}
这不是一个有效的json。我想解析它并得到文本,即“测试”,“测试”。
我只能通过以下方式检索分析部分:
response.getResponse().get("analysis");
这是一个org.apache.solr.common.util.SimpleOrderedMap对象。
有任何想法吗?先感谢您。
我终于使用了其他解决方案使用http请求:
http://localhost:8983/solr/docs/analysis/field?wt=json&analysis.showmatch=true&analysis.fieldvalue={custom}&analysis.fieldtype={custom}
我以有效的json格式返回结果。
基本上,它是Solr的罪,因为你提到它不是有效的json,但它是Solr中调用的字符串表示NamedList(SimpleOrderedMap是NamedList的子类)
一个简单的容器类,用于对名称/值对的有序列表进行建模。与地图不同:
- 名称可能会重复
- 保持元素的顺序
- 元素可以通过数字索引访问
- 名称和值都可以为null NamedList按元素编号提供快速访问,但不按名称提供。
遗憾的是,没有内置支持转换NamedList,因此,您必须编写自定义Java代码,这将从NamedList中提取所需的属性
另一种可能性是使用FieldAnalysisRequest,它将返回它FieldAnalysisResponse,其方法如下:
getFieldNameAnalysis(String fieldName)
哪个会给你FieldAnalysisResponse.Analysis
从两个可能的解决方案,我将推荐后者,因为它将更容易掌握和维护。