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

发布于 2021-11-25 23:48:47 字数 3492 浏览 871 评论 8

我在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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

陌若浮生 2021-11-27 11:22:23

请写个博文给大家讲解下吧

空城仅有旧梦在 2021-11-27 11:22:09

经过自己的研究,终于解决了问题,谢谢大家!

感情旳空白 2021-11-27 11:21:35

别沉了。 顶起来, 了解这个的 进来说说 ,谢谢!

天涯离梦残月幽梦 2021-11-27 11:21:12

我试了一下olrQuery("xm:三")或者SolrQuery("xm:三")或者SolrQuery("xm:(张 OR 三)") 这个方式。 还是查询不到中文的

空城仅有旧梦在 2021-11-27 11:03:16
<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 三)")

看看规律。

飘然心甜 2021-11-27 09:20:53

听你这么一说应该是用TermQuery的查询方式,new SolrQuery("xm:张三")。张三的索引里很可以是一个 "张","三" 两个term,这样查不出来。可能这原因 ps:我对Solr不熟
,lucene忘得差不多了 。lucene要准确的查询出来的话要用PhraseQuery,然后将间距设置为0,就可以查出来啦

百思不得你姐 2021-11-26 10:26:57

我没有有分词,我的需求直接等值查询出来就可以的

画骨成沙 2021-11-26 08:09:36

张三应该不是一个token吧,你用的什么分词器?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文