lucene ResponseBuilder getFilters对int字段类型的编码错误

时间:2014-03-24 16:08:27

标签: solr lucene

我为solr“int”字段类型获得了奇怪的值。列出ResponseBuilder过滤器时,我得到countryId的以下值。请注意,outletId字段的类型为String。 Solr架构中具有“int”类型

的每个字段都会发生此问题

term field and its value

<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>


 List<Query> filters = rb.getFilters();
 Set<Term> curTerms = null;
 for (Query q : filters) {              
  curTerms = new HashSet<Term>();
  q.extractTerms(curTerms);             
  for (Term term : curTerms) {                  
   System.out.println(term.field() + " = " + term.bytes().utf8ToString());
  }
 }

知道可能导致这个问题的原因吗?

1 个答案:

答案 0 :(得分:1)

http://grepcode.com/file/repo1.maven.org/maven2/org.apache.lucene/lucene-core/4.0.0/org/apache/lucene/index/Term.java#Term.text%28%29

使用term.bytes()得到的是该术语的原始二进制表示。如果你可以将它转换为字符串相关字段的文本,它将永远不会是这种情况。 要显示您的术语,您应首先将其原始值转换为Integer,然后再尝试将其转换为String

你可能想看看 http://docs.oracle.com/javase/6/docs/api/java/nio/ByteBuffer.html 用于将byte []转换为整数

检索字节数组term.bytes()。bytes应该是技巧。

term.bytes()。utf8ToString()等同于term.text()