首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene查询中的精确字段匹配

Lucene查询中的精确字段匹配
EN

Stack Overflow用户
提问于 2014-12-27 00:25:31
回答 1查看 766关注 0票数 2

当用户包含在查询中时,我正在寻找一种方法来精确匹配字段。

例如,假设我们有这些文档:

  • 博士1:追赶所有人:“你好世界”,主题:“科学”
  • 博士二:“再见世界”,主题:“生命科学”

如果用户搜索 subject :science world,我只希望返回doc1,因为它与subject完全匹配。然而,我得到了两个博士。

我尝试用subject索引KeywordAnalyzer,但是我得到了以下错误:

代码语言:javascript
复制
java.lang.IllegalStateException: field "subject" was indexed without position data; cannot run Phrase Query
EN

回答 1

Stack Overflow用户

发布于 2014-12-27 10:11:16

"subject“字段的错误可能是因为在索引中没有将项向量存储在字段中(在lucene代码中使用的是StringField还是TextField?)

要存储字段的术语向量,您应该使用lucene的field类,同时将字段使用定义为FieldType

代码语言:javascript
复制
    FieldType fieldType = new FieldType();
    fieldType.setStoreTermVectors(true);
    fieldType.setStoreTermVectorPositions(true);
    fieldType.setIndexed(true);
    fieldType.setIndexOptions(IndexOptions.DOCS_AND_FREQS);
    fieldType.setStored(true);

添加具有上述字段的文档

代码语言:javascript
复制
doc.add(new Field("field_name", "data", fieldType));

现在第一个问题,我可以想到两种方法

1)实现自定义相似性--您可以创建从默认相似性派生的新的相似性类,并更改lenghtNorm方法,以便您将优先使用“科学”而不是“生命科学”的文档排序,如何?根据比例对每个文档进行评分(匹配项来自查询/文档中的总术语)。正如你所看到的,更短和更相关的文件将得到更好的评分与上述比率。

2)后处理lucene返回文档以消除不必要的文档(不太推荐)-从Lucene获取文档列表,并删除不符合搜索标准的不需要的文档。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27663301

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档