请问solr4.6如何查询一个索引位中文的 内容
我在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());
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(8)
请写个博文给大家讲解下吧
经过自己的研究,终于解决了问题,谢谢大家!
别沉了。 顶起来, 了解这个的 进来说说 ,谢谢!
我试了一下olrQuery("xm:三")或者SolrQuery("xm:三")或者SolrQuery("xm:(张 OR 三)") 这个方式。 还是查询不到中文的
根据你提供的schema,可以确定你的分词器使用的是SmartChineseSentenceTokenizerFactory,既然是用户名称,如果需要模糊搜索就是要正确分词的,否则无法搜索到。
你可以试试SolrQuery("xm:三")或者SolrQuery("xm:三")或者SolrQuery("xm:(张 OR 三)")
看看规律。
听你这么一说应该是用TermQuery的查询方式,new SolrQuery("xm:张三")。张三的索引里很可以是一个 "张","三" 两个term,这样查不出来。可能这原因 ps:我对Solr不熟
,lucene忘得差不多了 。lucene要准确的查询出来的话要用PhraseQuery,然后将间距设置为0,就可以查出来啦
我没有有分词,我的需求直接等值查询出来就可以的
张三应该不是一个token吧,你用的什么分词器?