【问题标题】:Can someone help me understand Solr search behaviour in this case?在这种情况下,有人可以帮助我了解 Solr 搜索行为吗?
【发布时间】:2020-03-02 02:04:11
【问题描述】:

查询是这样的:-(Profisee) 索引字段具有与上述输入查询完全相同的标记。但是 Solr 搜索给出的结果为零。 如果查询是这样的:-(Profisee 然后我可以在结果中找到该文档。

P.S:我能够获得 (Pro, (Profi, (Profise 等查询) 的文档结果。 以下是附件图片。

Exact Query No Result

Inexact Query Got Result

Here is my schema.xml definition for the fieldtype

【问题讨论】:

  • 您能否在问题中包含debug.parsedQuery 值的输出?我也很想知道您使用debug.QParser 解析了什么
  • 请不要将代码发布为图像。您希望我们如何更正它或对其进行注释?请在问题的代码框中包含代码。

标签: search solr schema


【解决方案1】:

首先,请下次在您的问题中包含相关详细信息,因为图像难以搜索,难以获得您的问题的概述,并且对于那些没有完美视力的人来说难以阅读。

对于您的实际问题,问题在于您有一个 WhitespaceTokenizer。这将分断空格上的单词,例如。索引文档包含您的术语(foo),这意味着只有(foo) 将匹配(因为标记器only 会在空格处中断,而() 不是空格)。

foo (bar) 将被索引为两个标记,foo(bar)。搜索 (bar 两者都不匹配。

使用 StandardTokenizer 获取您想要的行为,或使用 WordDelimiterGraphFilterFactory 将单词分解为更多标记。

【讨论】:

  • 感谢您的意见。下次会尝试发布一个干净的问题。至于当前的问题,我知道foo (bar) 将被索引为foo(bar),在我的情况下,(bar(或(b(ba)在搜索中提供所需的文档,而(bar) 没有给出所需的结果。我需要将令牌捕获为 (bar) 本身,这就是 WhitespaceTokenizer 的原因。
  • 这是由 EdgeNgramFilter 和您附加的词干过滤器引起的。如果您不希望这种行为,请删除它们(我错过了您问题的那一部分,因为图像中的文字并且不知道我应该寻找什么)
  • 我需要 EdgeNgramFilter 以便 (b(ba(bar(bar) 可以与输入查询匹配,我还需要考虑特殊字符,如 @ 987654344@,!,_ 等,这就是我需要WhiteSpaceTokenizer 的原因。话虽如此,当输入的查询为 (bar) 但得到 0 个结果时,我仍然没有看到这种特殊情况的结果。请帮忙!
  • 您是否正确地转义了您的(-s?请记住,() 在 Lucene 查询语法中具有特殊含义(即 field1:(val1 AND val2),其中 () 不被视为查询的一部分。您可以通过前置来转义这些字符他们用 \.
  • 感谢@MatsLindh 的回复。因此,根据您的回答,我已经实现了这个标记器<tokenizer class="solr.PatternTokenizerFactory" pattern="[^ \t\r\n]+" group="0"/> 而不是WhiteSpaceTokenizer,但我仍然得到相同的响应。你能指导我完成一个标记器的实现,以便正确地转义括号吗? (还要注意我的 solr 版本是 5.2.1)
猜你喜欢
  • 1970-01-01
  • 2011-08-15
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 2011-08-24
  • 1970-01-01
  • 2013-03-03
相关资源
最近更新 更多