lucene搜索查询在solr4.6中不起作用

时间:2014-04-04 07:01:24

标签: mysql solr

我们有数百万条记录。最初我们使用lucene来索引数据,但由于OutofMemeory异常,决定将数据移到solr。下面是我们在schema.xml中声明的字段,用于执行索引和搜索操作。

 <field name="product"      type="string"   indexed="true"  stored="true"  multiValued="false" />
 <field name="source"       type="string"   indexed="true"  stored="true"  multiValued="false" />
 <field name="target"       type="string"   indexed="true"  stored="true"  multiValued="false" />
 <field name="pos"          type="string"   indexed="true"  stored="true"  multiValued="false" />
 <field name="company"     type="string"   indexed="true"  stored="true"  multiValued="false" />
 <field name="deprecated"   type="string"   indexed="true"  stored="true"  multiValued="false" />
 <field name="id"           type="string"   indexed="true"  stored="true"  multiValued="false" required="true"/>

我们正在使用solrj api来进行solr查询。

Solr查询代码:

SolrQuery solrQuery=new SolrQuery();
solrQuery.setQuery("id:*_TB");
solrQuery.setRows(10000);
solrQuery.addFilterQuery(searchStr);//
QueryResponse rsp = httpserver.query(solrQuery);

在lucene中,当用户在UI中键入短语时,查询正在进行精确搜索,模糊搜索等。

EX: - 推出新品牌

用于lucene中的精确搜索
searchstr =(来源:&#34; abc&#34;或目标:&#34; abc&#34;或弃用:&#34; abc&#34;)AND公司:&#34; tc&#34;

模糊搜索:
    searchstr =(来源:新品牌推出~0.7 OR目标:新品牌推出~0.7或弃用:新品牌推出~0.7)和公司:&#34; bb&#34;

默认搜索

searchstr =(来源:新品牌推出*或目标:推出新品牌*或弃用:新品牌推出*)和公司:&#34; cc&#34;

现在在solr上面查询不起作用。当用户输入上述&#34;新品牌推出&#34; UI中的短语给出零结果。有时我们面临的是区分大小写的问题,而不是lucene。

请建议我在哪里做错了。

1 个答案:

答案 0 :(得分:1)

  1. 您已声明字符串类型的所有字段。字符串fieldtypes不会标记化。你真的想要这种行为吗?

  2. (source:New Brand launched* OR target:New Brand launched* OR deprecated:New Brand launched*) AND company:"cc"
    如果您不想在要搜索的文本周围使用双引号,那么它将不是SOLR中的短语查询。所以source:New Brand launched*实际上会被搜索为
    source:New OR defaultField:Brand OR defaultField:launched*其中defaultField是schema.xml中定义的默认字段,OR / AND将根据schema.xml中指定的默认运算符使用。而是搜索source:"New Brand launched"

  3. 通过SOLR文档了解更多信息。