Lucene查询语法中所需运算符的含义

Lucene查询语法中所需运算符的含义,lucene,Lucene,我正在学习Lucene查询语法。我有一个如下的查询: black+forest 我的问题是,这个问题是什么意思?这是不是说: 给我匹配的词“黑”和“森林”或 给我一些与“森林”匹配的词,可能包括“黑色” 我试图理解以下两者之间的区别: +黑色+森林和黑色+森林和黑色+森林 感谢您帮助我理解这一点。 +黑色+森林-黑色和森林都是必填项。两者都必须在任何匹配的文档中找到 black+forest-forest是必填项,而black不是。这使得“黑色”一词成为一个应该的条款。最好的匹配通常会同时匹

我正在学习Lucene查询语法。我有一个如下的查询:

black+forest

我的问题是,这个问题是什么意思?这是不是说:

  • 给我匹配的词“黑”和“森林”或
  • 给我一些与“森林”匹配的词,可能包括“黑色”
我试图理解以下两者之间的区别:

+黑色+森林
黑色+森林
黑色+森林

感谢您帮助我理解这一点。

  • +黑色+森林
    -黑色和森林都是必填项。两者都必须在任何匹配的文档中找到

  • black+forest
    -forest是必填项,而black不是。这使得“黑色”一词成为一个应该的条款。最好的匹配通常会同时匹配这两个术语,但是只返回“forest”的文档,分数较低

  • black+forest
    -这里的
    +
    对查询解析器没有任何意义,它被解释为要搜索的另一个术语。使用
    StandardAnalyzer
    ,此术语将被删除,从而使此查询有效地
    黑森林
    。这将返回两项比赛的最佳结果,而两项比赛的得分都较低

    如果您使用的分析器没有删除标点符号(例如
    KeywordAnalyzer
    ),那么您的查询将如下所示:
    defaultField:black defaultField:+defaultField:forest


次要更正:WhitespaceAnalyzer将生成这样一个查询,KeywordAnalyzer根本不会拆分,并将生成类似于
defaultField:(黑色+森林)
@knutwalker-不,常见错误。QueryParser语法首先生效,空格分割查询子句。这与分析仪无关。子句是在查询解析之后进行分析的。是的,你是对的,至少在6.2之前是这样-我的印象是,最后一个示例没有通过查询解析器,这是我的错误。