java - Lucene:单个术语中的多个单词

标签 java lucene

假设我有一个类似的文档

stringfield:123456
textfield:name website stackoverflow

如果我按以下方式构建查询

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_42);
QueryParser luceneQueryParser = new QueryParser(Version.LUCENE_42, "", analyzer);
Query luceneSearchQuery = luceneQueryParser.parse("textfield:\"name website\"");

它将按预期返回文档,但如果我使用 Lucene QueryAPI 构建查询

PhraseQuery firstNameQuery  = new PhraseQuery();
    firstNameQuery.add(new Term("textfield","name website"));

它不会给我任何结果,我必须标记“名称网站”并在phrasequery中添加每个标记。

QueryAPI 中是否有任何默认方式可以像解析字符串查询时那样进行标记化。 当然,我自己可以做到这一点,但如果它已经实现了,我就重新发明轮子。

最佳答案

您将整个查询作为单个术语添加到您的 PhraseQuery 中。你走在正确的轨道上,但当标记化时,这将不再是单个术语,而是两个。也就是说,您的索引包含术语 namewebsitestackoverflow,但您的查询只有一个术语,与这些术语均不匹配 < em>命名网站。

使用 PhraseQuery 的正确方法是将每个术语单独添加到 PhraseQuery。

PhraseQuery phrase = new PhraseQuery();
phrase.add(new Term("textfield", "name"));
phrase.add(new Term("textfield", "website"));

关于java - Lucene:单个术语中的多个单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16963969/

相关文章:

java - 在 Freemarker 模板中,如何获取数据模型类的名称?

java - Hibernate一对多关系级联删除

java - Google App Engine SocketTimeout 异常

java - 如何在lucene中索引日期字段

elasticsearch - 为什么同一查询中某些结果分数包含 queryWeight,而其他分数则不包含 queryWeight?

java - Java 中正确的容器/数据结构

java - YouTube gdata API 返回有限结果

lucene - SOLR:NGramFilterFactory 的问题

Solr 7.3 索引正常 - 但搜索时返回 0 结果

Solr 邻近搜索评分