Java 适用于Lucene for';不区分大小写,包含';匹配

Java 适用于Lucene for';不区分大小写,包含';匹配,java,lucene,Java,Lucene,我正在使用Lucene在Javaservlet上创建搜索项的索引 用户在网页上输入文本,并向servlet发出ajax请求,以获取与查询字符串匹配的任何字符串。结果用于填充网页上的自动完成菜单 目前,Lucene代码仅在用户输入一个完整的单词时发送回匹配项。我希望它返回结果,即使只有1个字母匹配索引中的一个项目。换句话说,无论输入字符串有多小,如何让Lucene代码与整个输入字符串匹配?我需要更换正在使用的分析仪吗?我正在使用标准分析仪: StandardAnalyzer analyzer =

我正在使用Lucene在Javaservlet上创建搜索项的索引

用户在网页上输入文本,并向servlet发出ajax请求,以获取与查询字符串匹配的任何字符串。结果用于填充网页上的自动完成菜单

目前,Lucene代码仅在用户输入一个完整的单词时发送回匹配项。我希望它返回结果,即使只有1个字母匹配索引中的一个项目。换句话说,无论输入字符串有多小,如何让Lucene代码与整个输入字符串匹配?我需要更换正在使用的分析仪吗?我正在使用标准分析仪:

StandardAnalyzer analyzer = new StandardAnalyzer(Version.LUCENE_47);

通常,对单个字母进行匹配会破坏倒排文本引擎的功能,并且没有一个标准分析器能够做到这一点。如果您坚持,可以使用“最小值”和“最大值”设置为1的。您将需要构建自己的analyzer对象,但无论如何,这是一个好主意

根据OP希望跨越空白边界匹配的评论的澄清:


这不是倒排索引的工作。反向索引通过索引所有可以匹配的字符串来工作。将输入与所有任意长度的子字符串进行匹配需要一个巨大的索引,而且速度太慢。您完全需要其他内容。

为了确保我们讨论的是同一件事:我想将索引中的字符串与用户输入的字符串或用户输入的子字符串匹配,其中最小子字符串长度为单个字符。例如,“我的名字是约翰”可以与“m”、“我的”“我的nam”…等匹配。您仍然建议将最小值和最大值的NGramTokenizer设置为1吗?谢谢,不用了。我根本不推荐使用Lucene。