如何在java / solrj中解析Solr Analysis请求的响应?

问题描述 投票:2回答:2

我有一个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对象。

有任何想法吗?先感谢您。

java solr solrj
2个回答
2
投票

我终于使用了其他解决方案使用http请求:

http://localhost:8983/solr/docs/analysis/field?wt=json&analysis.showmatch=true&analysis.fieldvalue={custom}&analysis.fieldtype={custom}

我以有效的json格式返回结果。


1
投票

基本上,它是Solr的罪,因为你提到它不是有效的json,但它是Solr中调用的字符串表示NamedList(SimpleOrderedMap是NamedList的子类)

一个简单的容器类,用于对名称/值对的有序列表进行建模。与地图不同:

  • 名称可能会重复
  • 保持元素的顺序
  • 元素可以通过数字索引访问
  • 名称和值都可以为null NamedList按元素编号提供快速访问,但不按名称提供。

遗憾的是,没有内置支持转换NamedList,因此,您必须编写自定义Java代码,这将从NamedList中提取所需的属性

另一种可能性是使用FieldAnalysisRequest,它将返回它FieldAnalysisResponse,其方法如下:

getFieldNameAnalysis(String fieldName)

哪个会给你FieldAnalysisResponse.Analysis

从两个可能的解决方案,我将推荐后者,因为它将更容易掌握和维护。

© www.soinside.com 2019 - 2024. All rights reserved.