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

Lucene:基于令牌的前缀匹配或精确匹配的前缀

阙奇思
2023-03-14
  • foo-bar-herp
  • foo-bar-derp
  • baz-blub其他东西

我想提供一个搜索工作,以便

  • “foo bar”(标记化前缀)
  • “Foo Herp”(跳过令牌)
  • “foo-bar-”(确切的前缀)
  • “bar-herp”(中间的确切字符串)
  • “foo ba”(一个完整的令牌和另一个令牌的前缀)
    null

共有1个答案

华萧迟
2023-03-14

您的第一个(非关键)有点棘手,但为了确保在所有结果中都找到查询中的所有术语,您可以简单地使所有查询术语成为必需。您可以使用添加的加号运算符执行此操作:

  • +foo+bar
  • +foo+ba*(如果要处理前缀,则需要添加通配符来指定前缀,或者可能使用ngram标记器或类似的工具)

或者,您可以使用StandardQueryParser.SetDefaultOperator将默认运算符设置为

queryParser.setDefaultOperator(StandardQueryConfigHandler.Operator.AND);
    null
SpanQuery term1 = new SpanTermQuery(new Term("content", "foo"));
SpanQuery term2Prefix = new SpanMultiTermQueryWrapper(new PrefixQuery(new Term("content", "her")));
SpanQuery finalQuery = new SpanNearQuery(new SpanQuery[] {term1, term2Prefix}, 5, true);
 类似资料:
  • 在PostgreSQL中获得最长前缀匹配的准确快速查询的最佳方法是什么? 是: 我计划在更新中使用。有什么想法吗?

  • 问题内容: 我想在查询上使用模糊匹配,但在结果顶部显示完全匹配。 我已经尝试了以下方法。 由于格式错误的查询错误,此方法不起作用。 有任何想法吗? 问题答案: 我最终没有使用模糊匹配来解决我的问题,而是使用了ngram。 结果正是我想要的。它根据搜索查询中包含的ngram部分构造匹配项。

  • 我遇到了一个问题,elasticsearch在我的环境(舞台和生产)中返回不同的结果。 我使用的elasticsearch版本对于这两种环境是相同的。 这两个环境都具有相同的映射和索引设置。 我有一个项目索引的标题字段为“测试”。我正在尝试执行match_phrase_prefix查询。然而,在我的舞台环境中,当我搜索“te”时,结果会像预期的那样返回。在生产中,我必须将搜索查询扩展到“TES”(

  • 问题内容: 假设在我的Elasticsearch索引中,我有一个名为“点”的字段,其中将包含由标点符号分隔的字符串(例如“ first.second.third”)。 我需要搜索例如“ first.second”,然后获取其“点”字段包含正好是“ first.second”或以“ first.second”开头的字符串的所有条目。 我在理解文本查询的工作方式时遇到问题,至少我无法创建执行此任务的查

  • 我正在使用elasticsearch从json字段进行精确短语匹配。我尝试过多种语法,比如multi_match、query_string query_string我正在使用的语法; 我也尝试了过滤器而不是查询,但是过滤器在json上没有给出任何结果。我用于过滤器的语法是; 现在的问题是; 是否可以使用elasticsearch对json执行精确匹配操作?

  • 我不知道如何通过MatchPhrasePrefix搜索索引中的文档。我想匹配整个搜索词短语,但允许在最后一个词上加前缀。 这个LINQ建筑给了我1.0分的一切。我将如何构建这个?另一方面,是否可以查看NEST正在构建的原始查询?那将非常有帮助!