我有一个具有“url”字段的Solr架构:
<fieldType name="url" class="solr.TextField"
positionIncrementGap="100">
</fieldType>
<fields>
<field name="id" type="string" stored="true" indexed="true"/>
<field name="url" type="url" stored="true" indexed="false"/>
<field name="chunkNum" type="long" stored="true" indexed="false"/>
<field name="origScore" type="float" stored="true" indexed="true"/>
<field name="concept" type="string" stored="true" indexed="true"/>
<field name="text" type="text" stored="true" indexed="true"
required="true"/>
<field name="title" type="text" stored="true" indexed="true"/>
<field name="origDoctype" type="string" stored="true" indexed="true"/>
<field name="keywords" type="string" stored="true" indexed="true"/>
</fields>
<uniqueKey>id</uniqueKey>
<defaultSearchField>text</defaultSearchField>
<solrQueryParser defaultOperator="OR"/>
我可以添加包含所有字段的SolrInputDocuments,并使用文本字段和/或对“概念”的过滤查询进行查询。但是当我尝试查询特定网址时,我没有得到任何结果。我的代码如下:
SolrQuery query = new SolrQuery();
query.setQuery("url:" + ClientUtils.escapeQueryChars(url));
//query.setQuery("*:*");
//query.addFilterQuery("url:" + ClientUtils.escapeQueryChars(url));
List<Chunk> retCode = null;
try
{
QueryResponse resp = solrServer.query(query);
SolrDocumentList docs = resp.getResults();
retCode = new ArrayList<Chunk>(docs.size());
for (SolrDocument doc : docs)
{
LOG.debug("got doc " + doc);
Chunk chunk = new Chunk(doc);
retCode.add(chunk);
}
}
catch (SolrServerException e)
{
LOG.error("caught a server exception", e);
}
return retCode;
我尝试过使用和不使用ClientUtils.escapeQueryChars,我尝试使用“url:”查询或url上的过滤查询。我再也没有得到任何回报。任何提示?
答案 0 :(得分:1)
什么是“网址”的实际类型?在schema.xml中,您应该有一组“fieldType”元素,列出构成数据类型的实际Solr支持类和过滤器。
对于“url”的“fieldType”,您感兴趣的是“class”属性。例如。最基本的自由文本类型有一个class =“solr.TextField”。您可能正在使用一种类型,其中包含一些古怪的过滤器,Lucene / Solr最终会将您的数据编入索引,与您期望的不同。
下载Luke并直观地查看您的索引:
它可以帮助您“查看”您的数据 - 就像我说的那样,可能存储的方式与您预期的不同。
答案 1 :(得分:0)
该死,另一个愚蠢的人:感谢Cody建议使用Luke,我发现了这个架构中不方便的部分:
<field name="url" type="url" stored="true" indexed="false"/>
将其更改为indexed="true"
解决了问题。