2017-10-09 80 views
1

我有一个Java程序在solr服务器中发出请求。我创建了一个触发的Solr的分析服务查询:如何解析java/solrj中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对象:

我只能通过检索分析部分。

任何想法?先谢谢你。

+0

你应该看看FieldAnalysisRequest。我在这里找到一个例子http://useof.org/java-open-source/org.apache.solr.client.solrj.request.FieldAnalysisRequest/2希望这有助于。 –

回答

0

基本上,它是Solr中的罪,因为你提到的这不是有效的JSON,但它是相当的所谓Solr中字符串表示NamedList(SimpleOrderedMap是NamedList的子类)

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

  • 名称可以重复
  • 元素
  • 秩序维持
  • 元素可以通过数字索引来访问
  • 名称和值都可以是空

    NamedList提供快速访问按元素编号,但不是按名称。

不幸的是,有一些支持没有内置转化NamedList,所以,你必须编写自定义的Java代码,这将提取需要的属性了NamedList的

另一种可能是使用FieldAnalysisRequest ,这将返回它FieldAnalysisResponse,其中有一个方法,如:

getFieldNameAnalysis(String fieldName) 

,这将给你FieldAnalysisResponse.Analysis

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

+0

谢谢你,我用fieldanalysisrequest试了一下,但我仍然以同样的方式得到了回应。我终于找到了另一个解决方案,我也发布了答案。 – galatia

0

我终于使用了另一种解决方案。在http请求中:

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

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

谢谢你以前的回复。