当前位置: 首页 > 知识库问答 >
问题:

Lucene:用部分词搜索

归星驰
2023-03-14

我正在努力在我们的应用程序中集成Lucene。Lucene目前正在工作,例如当我搜索“上传”时,文档中有一些叫做“上传”的文本,那么它就工作了,但是当我搜索“上传”时,那么它就不工作了。有什么想法吗?

代码:

  Directory directory = FSDirectory.open(path);
                IndexReader indexReader = DirectoryReader.open(directory);
                IndexSearcher indexSearcher = new IndexSearcher(indexReader);

                QueryParser queryParser = new QueryParser("contents", new SimpleAnalyzer());
                Query query = queryParser.parse(text);
                TopDocs topDocs = indexSearcher.search(query, 50);
                for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
                    org.apache.lucene.document.Document document = indexSearcher.doc(scoreDoc.doc);
                    objectIds.add(Integer.valueOf(document.get("id")));
                    System.out.println("");
                    System.out.println("id " + document.get("id"));
                    System.out.println("content " + document.get("contents"));
                }
                return objectIds;

谢谢你。

共有3个答案

仉成益
2023-03-14

改变

Query query = queryParser.parse(text);

 Query query = queryParser.parse("*"+text+"*");

Lucene支持在单个术语(而不是短语查询)中进行单字符和多字符通配符搜索。

要执行单字符通配符搜索,请使用“?”象征

要执行多字符通配符搜索,请使用“*”符号。

单字符通配符搜索查找与替换的单字符匹配的术语。例如,要搜索“文本”或“测试”,可以使用搜索:

te?t

多字符通配符搜索查找0个或更多字符。例如,要搜索测试、测试或测试仪,可以使用搜索:

test*

您还可以在术语中间使用通配符搜索。

te*t

注意:您不能使用*或?符号作为搜索的第一个字符。

戚泰
2023-03-14

可以使用通配符搜索。

"?" 用于单字符通配符搜索的符号和用于多字符通配符搜索的“*”符号(0个或更多字符)。

示例-“Uplo*”

高嘉树
2023-03-14

上传可能是Lucene索引中的一个令牌,其中一个令牌将是不可进一步分割的最小实体。如果你想匹配像Uplo这样的部分单词,那么最好选择Lucene NGram索引。请注意,如果您使用NGram索引,您将对倒置索引有更高的空间要求。

 类似资料:
  • 我们正在用搜索词字符串构建bool查询来搜索Lucene索引。我希望使用标准分析器分析这些字符串,我们使用的分析器用于索引。例如,应该分解为,,,因为Lucene文档声明连字符会导致数字保持在一起,但单词会被标记化。最好的方法是什么? 目前,我正在通过QueryParser运行我的搜索项字符串。 这样做的问题是插入了引号。例如,变为,,不会返回任何内容,因为Lucene会将标记为和. 我绝对不想通

  • 问题内容: 我正在尝试使用Apache Lucene创建可搜索的电话/本地业务目录。 我有街道名称,公司名称,电话号码等字段。我遇到的问题是,当我尝试按街道名称中包含多个单词(例如“新月”)的街道进行搜索时,没有返回结果。但是,如果我尝试仅用一个词(例如“新月”)进行搜索,那么我会得到所有想要的结果。 我正在使用以下索引数据: 我的搜索是这样的: 我尝试过将通配符查询替换为短语查询,首先将整个字符

  • 我试图用一个词作为查询来查找匹配项,但它似乎找不到。我正在使用标准分析仪,但找不到准确的结果。 我的索引文档是: 如果使用通配符查询: 它会返回内容:“敏捷的棕色狐狸跳过懒惰的狗” 如果使用术语查询: 它会返回内容:“敏捷的棕色狐狸跳过懒惰的狗” 现在,我想用“狐狸”作为我的新名词 但是我不知道哪个是正确的查询,或者如何做。我已经尝试了QueryParser、TermQuery和MultiPhra

  • 问题内容: 我想搜索包含许多单词的字符串,并检索与其中任何一个匹配的文档。我的索引方法如下: 这是我的搜索方法。我不想寻找特定的词组,但是其中的任何单词。用于搜索的分析器与用于索引的分析器相同。 我是Lucene的新手。有人可以帮我吗? 问题答案: 使用会精确地尝试将短语“单词列表”与短语坡度0匹配。 如果要匹配单词列表中的 任何 术语,可以使用: 或者,您也可以使用,以便您可以要求查询词的数量的

  • 我继承了一个使用Lucene 4.6的项目。0以搜索xml文档。 基本上我的问题似乎是这样的: 搜索带有包含的文本字段的文档时,在搜索任何这些单词时返回突出显示的文档,但是如果文本字段包含类似于的内容,则仅搜索"授权"返回一个结果。 我猜是因为方括号的缘故,lucene没有把和看作单词?我不是lucene的专家,即使有文档,我也被困在这个问题上。有没有办法定制一个分析器,将“[”作为单词搜索的一部

  • 问题内容: MySQL全文搜索似乎是一种很棒的方法,也是使用SQL进行搜索的最佳方法。但是,我似乎停留在以下事实:它不会搜索部分单词。例如,如果我有一篇标题为“ MySQL Tutorial”的文章并搜索“ MySQL”,它将找不到它。 完成一些搜索后,我发现MySQL 4中提供了各种支持该功能的参考(我使用的是5.1.40)。我曾尝试使用“ MySQL ”和“%MySQL%”,但均无效(我发现一