there are more terms than documents in field "attr_quotes", but it's impossible to sort on tokenized fields
2010-06-10 16:01:43 [main] [org.apache.solr.core.SolrCore]-[ERROR] java.lang.RuntimeException: there are more terms than documents in field "attr_quotes", but it's impossible to sort on tokenized fields
at org.apache.lucene.search.FieldCacheImpl$StringIndexCache.createValue(FieldCacheImpl.java:706)
at org.apache.lucene.search.FieldCacheImpl$Cache.get(FieldCacheImpl.java:208)
at org.apache.lucen
attr_quotes asc
贴下引发异常的代码。由此证明 分词的field和 多值的field不能排序的。
protected Object createValue(IndexReader reader, Entry entryKey)
throws IOException {
String field = StringHelper.intern(entryKey.field);
final int[] retArray = new int[reader.maxDoc()];
String[] mterms = new String[reader.maxDoc()+1];
TermDocs termDocs = reader.termDocs();
TermEnum termEnum = reader.terms (new Term (field));
int t = 0; // current term number
// an entry for documents that have no terms in this field
// should a document with no terms be at top or bottom?
// this puts them at the top - if it is changed, FieldDocSortedHitQueue
// needs to change as well.
mterms[t++] = null;
try {
do {
Term term = termEnum.term();
if (term==null || term.field() != field) break;
// store term text
// we expect that there is at most one term per document
if (t >= mterms.length) throw new RuntimeException ("there are more terms than " +
"documents in field \"" + field + "\", but it's impossible to sort on " +
"tokenized fields");
mterms[t] = term.text();
termDocs.seek (termEnum);
while (termDocs.next()) {
retArray[termDocs.doc()] = t;
}
t++;
} while (termEnum.next());
} finally {
termDocs.close();
termEnum.close();
}
if (t == 0) {
// if there are no terms, make the term array
// have a single null entry
mterms = new String[1];
} else if (t < mterms.length) {
// if there are less terms than documents,
// trim off the dead array space
String[] terms = new String[t];
System.arraycopy (mterms, 0, terms, 0, t);
mterms = terms;
}
StringIndex value = new StringIndex (retArray, mterms);
return value;
}
};
分享到:
相关推荐
4. 高级搜索功能:Solr提供丰富的查询语法,如布尔逻辑、短语匹配、模糊匹配、字段限制等,以及自定义查询解析器和过滤器。 5. 自定义排序和评分:用户可以自定义文档排序规则和评分算法,以满足特定的业务需求。 6....
Solr是Apache软件基金会的一个开源项目,它是基于Java的全文搜索服务器,主要功能包括文档索引、搜索、排序和分布式处理。Solr利用了Lucene库的强大搜索功能,并且提供了更高级别的API和服务,使得企业级搜索应用的...
索引数据后,用户可以通过 Solr 的查询接口执行搜索,查询语句可以包含各种条件、过滤器和排序规则,实现复杂的查询逻辑。Solr 还支持实时更新和增量索引,保证了数据的实时性。 为了进一步优化搜索体验,Solr 支持...
7. **结果集排序和剪枝**:Solr允许用户根据相关度或其他自定义因素对搜索结果进行排序,并且可以通过设置查询限制来控制返回的结果数量。 8. ** faceted search(面式搜索)**:Solr提供了一种高效的方式来实现...
Solr的核心是Lucene库,这是一个强大的全文搜索引擎库,但Solr在Lucene的基础上提供了更多高级特性,如分布式搜索、集群支持、多核心管理、自定义排序和高亮显示等。 源代码分析: 1. **索引构建与查询处理**: ...
下载完成后,解压缩到一个合适的目录,一般推荐在不受系统权限限制的路径下,例如`C:\solr`。解压后,你会看到一系列的文件夹和文件,其中包含Solr的配置、核心(core)以及Tomcat服务器,因为Solr通常是在Tomcat...
在"Solr注意.txt"文件中,可能会包含一些使用Solr过程中需要注意的事项或最佳实践,例如避免使用不推荐的配置选项,或是对特定功能的限制和警告。 "archives"可能是一个包含历史版本或备份的目录,对于跟踪Solr的...
- **安全性**:设置安全策略,限制对 Solr 的访问,防止未授权的查询和操作。 - **扩展性**:考虑未来可能的数据增长,设计可扩展的架构,如云部署或水平扩展。 5. **Solr 的应用场景** - **电商搜索**:在购物...
此外,文档中还提到了一些潜在的OCR(光学字符识别)技术的限制,例如文字识别错误或者漏识别的情况。这说明在处理文档或扫描文档内容的时候,需要仔细校验和理解扫描出的文字,确保所获得的信息是准确无误的。这...
案例可能会涉及如何配置Solr的安全模块,如Shiro或Kerberos,以限制对Solr服务的访问。 数据库部分可能涉及如何与Solr配合使用的数据库类型(如MySQL、Oracle等),以及如何设计数据库结构以支持高效的数据导入和...
- **高度可配置性**:Solr允许用户根据需求定制搜索行为,包括自定义排序规则、过滤条件等。 - **丰富的功能集**:除了基本的文本搜索外,Solr还支持地理位置搜索、拼写检查等功能。 - **RESTful API**:Solr提供了...
- **facet.sort**:控制分面结果的排序方式,可以按分面值的出现次数(默认)、字母顺序或其他自定义排序方式。 - **facet.limit**:限制返回的分面结果数量,超出此限制的将不会显示。 - **facet.offset**:设定...
filterCache主要用于存储文档ID的集合,这些ID集合可用于查询过滤、结果分组或排序等场景。通过对filterCache进行优化,可以显著提高搜索性能。例如,在使用`facet`和`fq`参数时,合理调整filterCache可以大幅提升...
- **“~”**:模糊检索,如`roam~`可找到与“roam”拼写相近的单词,`roam~0.8`则限制了模糊程度。 - **“^”**:用于调整相关度,使某些关键词在搜索结果中更具优先级。 - **布尔操作符AND、OR、NOT**:分别用于...
- `fq`:过滤查询,限制结果集。 - `sort`:排序依据。 - `rows`:返回结果的数量。 - `start`:结果集的起始位置,用于分页。 三、Solr 文档添加 1. 使用 HTTP POST 方法向 Solr 添加文档,例如 `curl ...
- 排序(Sorting)和分页(Pagination):在返回结果之前,可以对结果进行排序和限制返回数量。 - 高亮(Highlighting)和命中(Hits)统计:用户界面可以通过高亮显示匹配的文本部分,并提供关于总命中数的统计信息。 ### ...
- **solrconfig.xml**:包含了Solr服务的各种配置参数,如索引更新策略、搜索响应时间限制等,是控制Solr行为的关键文件。 #### SOLR的应用 - **SOLR应用概述**:Solr广泛应用于各种场景,如电子商务产品搜索、...
- **过滤器与排序**:使用过滤器而不是查询来限制结果集,这可以显著提高查询效率。 - **使用 DisMax 查询处理器**:DisMax 提供了更灵活的查询语法,支持多种查询选项,如近义词查询等。 - **使用 Faceting**:...
- `sort`:排序方式,如`sort=id desc`。 - `wt`:指定输出格式,如`xml`, `json`等。 - `fq`:过滤查询,限制返回结果。 - `df`:默认查询字段。 - `qt`:查询类型,一般不用指定。 - `indent`:控制返回结果是否...