gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:58:41 25 4
gpt4 key购买 nike

假设我有一个类似的文档

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com