我们有数百万条记录。最初我们使用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。
请建议我在哪里做错了。
答案 0 :(得分:1)
您已声明字符串类型的所有字段。字符串fieldtypes不会标记化。你真的想要这种行为吗?
(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"
通过SOLR文档了解更多信息。