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

Lucene通配符和结尾带有字母“s”的单词

莫逸仙
2023-03-14
(Id:gloves* Search:gloves* SpellCheckerSource:gloves*) OR
(Id:gloves Search:gloves SpellCheckerSource:gloves) OR
(Id:glove* Search:glove* SpellCheckerSource:glove*) 
(() () ())
(Id:glove Search:glove SpellCheckerSource:glove) 
(() ConstantScore(Search:glove*) ConstantScore(SpellCheckerSource:glove*))

这是使用LUKE,我一直在LUKE中运行查询,看看发生了什么。http://www.getopt.org/luke/

现在我想要做的是搜索一个术语ie Gloves*,它最终是(()()())

我不明白为什么这会被翻译成这样,并在我的查询或索引中出现问题?

lucene.BooleanQuery
  clauses=3, maxClauses=1024
  Clause 0: SHOULD
    lucene.BooleanQuery
      clauses=3, maxClauses=1024
      Clause 0: SHOULD
        lucene.BooleanQuery
          clauses=0, maxClauses=1024, coord=false
      Clause 1: SHOULD
        lucene.BooleanQuery
          clauses=0, maxClauses=1024, coord=false
      Clause 2: SHOULD
        lucene.BooleanQuery
          clauses=0, maxClauses=1024, coord=false
  Clause 1: SHOULD
    lucene.BooleanQuery
      clauses=3, maxClauses=1024
      Clause 0: SHOULD
        lucene.TermQuery
          Term: field='Id' text='glove'
      Clause 1: SHOULD
        lucene.TermQuery
          Term: field='Search' text='glove'
      Clause 2: SHOULD
        lucene.TermQuery
          Term: field='SpellCheckerSource' text='glove'
  Clause 2: SHOULD
    lucene.BooleanQuery
      clauses=3, maxClauses=1024
      Clause 0: SHOULD
        lucene.BooleanQuery
          clauses=0, maxClauses=1024, coord=false
      Clause 1: SHOULD
        lucene.ConstantScoreQuery, ConstantScore(Search:glove*)
          Filter: Search:glove*
      Clause 2: SHOULD
        lucene.ConstantScoreQuery, ConstantScore(SpellCheckerSource:glove*)
          Filter: SpellCheckerSource:glove*
    null

需要注意的是,当我使用out和s IE glove或out通配符搜索一个术语时,一切都很好,只是两者的结合似乎破坏了查询。

共有1个答案

简滨海
2023-03-14

这可能是因为索引中没有匹配“Gloves*”的术语。

重写MultitermQuery时,它会查找合适的术语,并对这些术语创建原语查询(例如TermQuery)。如果没有找到合适的术语,您将看到生成一个空查询,如下所示。

TermQuery已经是一个原语查询,不需要重写。它不需要枚举术语或任何东西,它只是运行这个东西。

 类似资料:
  • 如何编写由字符组成但必须以相同字母开头和结尾的正则表达式?例如:

  • 它对一些包含“-”的词有效,但不是对所有的词都有效,我不知道为什么它不起作用。 我正在搜索的字段是经过分析的,其中包含有“-”字符和没有“-”字符的单词版本。 我正在使用分析器:org.apache.lucene.analysis.standard.StandardAnalyzer 如果我搜索没有“*”的“v-strom”,它可以工作,但如果我只搜索“v-str”,例如,我不会得到结果。(应该会有

  • 我试图找出我的字符串是否包含从a到z的所有字母 我们可以通过其他方法解决这个问题,但我正在尝试仅使用模式和匹配器来解决它。

  • 问题内容: 我正在解决一个简单的问题: 在Java中删除字符数组中的某些字符,想法很简单: 我想输入一个信号,表示当我们想要使用例如生成一个字符串时,不必考虑数组的其余部分 Java中是否有这样的字符?(我想是,但我不确定) 例如,当我们调用: 这将被打印: 虽然我想得到,但我不想使用新的数组来做到这一点 问题答案: Java不会像C那样“标记”字符串的结尾。它跟踪长度和值,因此字符串中可以包含零

  • 我需要一个正则表达式来精确匹配在字符串开头或结尾设置的字符,并将它们替换为。注意:它不应该与该字符集的部分匹配,只有当它完整地出现时。 因此,如果我有,它应该返回。 如果我有,它应该只删除,而不是开头的,因为它不是整个,而是它的一部分。 我尝试的是: “AB”不应匹配,因为它们不是单独“AB”组,而是其他单词的一部分。

  • 问题 你需要通过指定的文本模式去检查字符串的开头或者结尾,比如文件名后缀,URL Scheme等等。 解决方案 检查字符串开头或结尾的一个简单方法是使用 str.startswith() 或者是 str.endswith() 方法。比如: >>> filename = 'spam.txt' >>> filename.endswith('.txt') True >>> filename.starts