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

Lucene Analyzer用于简单的直接字段搜索

徐瀚
2023-03-14

我尝试了许多lucene分析器,发现关键字分析器最符合我的要求。我使用相同的关键字分析器更新文档,并使用QueryParser搜索相同的关键字。我想搜索支持通配符的值。例如:如果字段“country”包含值“india”,我可以搜索与“ind*”、“ndi”、india等相同的字段。我将获得除精确匹配之外的所有其他搜索的匹配。当我搜索确切的单词(国家:印度)时,我没有找到任何匹配项。如果我将同一查询更改为“国家:印度*”或“国家:印度?”,我要比赛了。此外,我还有一个疑问,如果有一个国家的名字是“不是”,我怎么能搜索相同的。我试过“国家:”“不是”和“国家:”“不是”。但两者都失败了。在这两种情况下究竟发生了什么?请帮忙。

共有1个答案

孟彦
2023-03-14

我怀疑你在国家名称后面有一些空白或其他无关字符。您可以在将输入添加到Lucene之前修剪它,或者实现自定义关键字分析器,并添加一个TrimFilter,类似于:

public final class CustomKeywordAnalyzer extends Analyzer {
  public CustomKeywordAnalyzer() {
  }

  @Override
  protected TokenStreamComponents createComponents(final String fieldName, final Reader reader) {
    Tokenizer tokenizer = new KeywordTokenizer(reader)
    TokenStream filter = new TrimFilter(Version.LUCENE_43, tokenizer);
    return new TokenStreamComponents(tokenizer, filter);
  }
}

就搜索“not”而言,它仅仅是小写就足以使它不被解释为布尔运算符(运算符必须是大写,根据文档)。但是,这些单词会被标准英语StopFilter捕获,例如standardalyzer使用的单词。您确定在查询时只使用了关键字分析器

但是,除此之外,避免查询解析器保留字的可靠方法是完全绕过查询解析器,自己构造查询:

Query query = new TermQuery(new Term("country", userQuery));

 类似资料:
  • 问题内容: 我似乎无法在此方法中找到for循环所需的语法。我想遍历字符串中的单词。 编辑:要注意的一件事是cardArray是ArrayList。 问题答案: 你可以用 在每个空格字符(U + 0020) 上分割。 或者: 这会分割每个空格字符序列(包括制表符,换行符等)。

  • 我试图完成一个非常基本的任务:我想要一个只有一个字段(一个电子邮件地址)的表单和一个“添加”按钮,这样你就可以添加其他电子邮件地址。我稍后会给每个通过的地址发送电子邮件。 我遇到了这个,理论上这正是我需要的。我可以直接在控制器内创建表单,因为我只在这里使用它。以下是控制器内部的功能: 这是树枝: 我得到以下错误: “值、属性、形式、id、名称、全名、禁用、标签、标签格式、多部分、块前缀、唯一块前缀

  • 假设我们有一个ElasticSearch实例和一个索引。我现在要在整个索引中搜索包含特定值的文档。它与在多个字段上搜索该查询相关,因此我不想指定要在其中搜索的每个字段。 到目前为止我的尝试(使用NEST)如下: 在ConnectionString上应用以下调试后,我将获得以下输出: 我该怎么做?为什么我的查询是错误的?

  • 如果我想搜索那些名字中包含巴黎的地方,我会做以下操作: 这样我就能看到所有有巴黎这个名字的地方。 然而,我如何能够搜索到其他标准的地方,如 null 在Cloud Firestore中这甚至是可能的吗?如果没有的话,有没有其他方法可以做到这一点?

  • 我在用Lucene。NET 3.0。3用于索引word、excel等文档的内容以及每个文档的一些自定义字段 如果我将名为“title”的字段索引为字段。指数未分析Lucene索引以正确形式存储字段。孔标题存储在单个标记中。这就是我想要的。 e、 g.文件标题为Lucene索引中的“Lorem ipsum dolor”字段:“Lorem ipsum dolor” 我的搜索词看起来像:标题:"Lore

  • 问题内容: 我正在使用Elasticsearch 2.1。我不太清楚自己在做什么错。它使我困惑查询,过滤器之间的区别…您能帮我吗? 我正在尝试执行此查询。它返回一个空结果: 但是,当我执行不带过滤器的查询时,它将返回所有内容: 这是一个文档样本: 问题答案: 这应该工作。