请问solr4.6如何查询一个索引位中文的 内容

David_Tio 发布于 2013/12/09 15:43
阅读 1K+
收藏 0

我在solr中创建了几个索引。 其中有一列索引名字为xm,其内容为中文的。其他的索引 我可以用SolrQuery query = new SolrQuery("studentid:801000003217"); 这样的方式查询出来,请问中文的xm列 我要如何进行查询呢。 用SolrQuery query = new SolrQuery("xm:张三")这样的方式查询不出来。谢谢大家  


我的schema.xml配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<schema name="news_map" version="1.5">
<fields>
  <field name="inrowkey"  type="text_smart" indexed="true" stored="true" multiValued="false" required="true"  />
  <field name="SFZH"  type="text_number" indexed="true" stored="false" multiValued="false"/>
  <field name="XM"  type="text_smart" indexed="true" stored="false" multiValued="false"/>
  <field name="DWMC"    type="text_smart" indexed="true" stored="false" multiValued="false"/>
  <field name="_version_"        type="long" indexed="true" stored="true"/>
  <field name="text"             type="text" stored="false" indexed="false"/>
  <field name="string"           type="string" stored="false" indexed="false"/>
</fields> 
<uniqueKey>inrowkey</uniqueKey> 
<types> 
<fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/> 
<fieldType name="text" class="solr.TextField"/>
<fieldType name="string" class="solr.StrField"/> 
<fieldType name="text_smart" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
<filter class="solr.SmartChineseWordTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
<filter class="solr.SmartChineseWordTokenFilterFactory"/>
</analyzer>
</fieldType> 
<fieldType name="text_number" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="50" side="front"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.WhitespaceTokenizerFactory"/>
<filter class="solr.EdgeNGramFilterFactory" minGramSize="1" maxGramSize="50" side="front"/>
</analyzer>
</fieldType> 
</types>
</schema>



我的java 查询代码:

public void query() throws SolrServerException, IOException {
Configuration conf = this.getCon();
HTable table = new HTable(conf, "myTable");
Get get = null;
List<Get> list = new ArrayList<Get>();
String url = "http://localhost:8080/solr";
SolrServer server = new HttpSolrServer(url); 
//SolrQuery query = new SolrQuery("XM:张*");  //这种方式查询不出来
 SolrQuery query = new SolrQuery("SFZH:101110203217");//这种方式可以
query.setStart(0); // 数据起始行,分页用
query.setRows(10); // 返回记录数,分页用
QueryResponse response = server.query(query);
SolrDocumentList docs = response.getResults();
System.out.println("文档个数:" + docs.getNumFound()); 
System.out.println("查询时间:" + response.getQTime());


加载中
0
jiacai2050
jiacai2050
张三应该不是一个token吧,你用的什么分词器?
David_Tio
David_Tio
我没有有分词,我的需求直接等值查询出来就可以的
0
XzhiF
XzhiF
听你这么一说应该是用TermQuery的查询方式,new SolrQuery("xm:张三")。张三的索引里很可以是一个 "张","三" 两个term,这样查不出来。可能这原因 ps:我对Solr不熟 ,lucene忘得差不多了 。lucene要准确的查询出来的话要用PhraseQuery,然后将间距设置为0,就可以查出来啦
0
震秦
震秦
<field name="XM"  type="text_smart" indexed="true" stored="false" multiValued="false"/>
<fieldType name="text_smart" class="solr.TextField" positionIncrementGap="100">
<analyzer type="index">
<tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
<filter class="solr.SmartChineseWordTokenFilterFactory"/>
</analyzer>
<analyzer type="query">
<tokenizer class="solr.SmartChineseSentenceTokenizerFactory"/>
<filter class="solr.SmartChineseWordTokenFilterFactory"/>
</analyzer>
</fieldType>
根据你提供的schema,可以确定你的分词器使用的是SmartChineseSentenceTokenizerFactory,既然是用户名称,如果需要模糊搜索就是要正确分词的,否则无法搜索到。

你可以试试SolrQuery("xm:三")或者SolrQuery("xm:三")或者SolrQuery("xm:(张 OR 三)")

看看规律。

David_Tio
David_Tio
我试了一下olrQuery("xm:三")或者SolrQuery("xm:三")或者SolrQuery("xm:(张 OR 三)") 这个方式。 还是查询不到中文的
0
David_Tio
David_Tio
别沉了。 顶起来, 了解这个的 进来说说 ,谢谢!
0
David_Tio
David_Tio
经过自己的研究,终于解决了问题,谢谢大家!
王政
王政
请写个博文给大家讲解下吧
返回顶部
顶部