Lucene 如何使用引号和通配符

How does Lucene work with quotes and wildcards

当我在 lucene 中搜索荷兰语单词 bieten 时,它们之间的区别如下:使用 DutchAnalyzer 时 bieten"bieten""*bieten*"*bieten*并允许前导通配符?

因为据我所知,在你的解析器语法中,引号只是用来处理空格,所​​有的词总是像它们周围的通配符一样被搜索。

我问这个问题的原因是因为我发现通过使用 DutchAnalyzer,所有单词在进入索引之前都会去掉其复数形式。在我的例子中,这意味着 biet 存储在索引中而不是 bieten。 当使用 bieten 或 "bieten" 或 "bieten" 进行搜索时,它还会将查询修改为 biet.
但是当我使用 *bieten* 时,查询不会改变并保持复数形式。没有给出任何结果。
所以

  bieten   -->> biet 
 "bieten"  -->> biet
"*bieten*" -->> biet 
 *bieten*  -->> *bieten*

为什么最后一个搜索被翻译成与其他搜索不同的查询。

查询解析器语法:https://lucene.apache.org/core/2_9_4/queryparsersyntax.html
Lucene 截图:http://oi63.tinypic.com/1z5krdg.jpg

查询解析器不分析通配符、正则表达式和模糊查询,这就是它们不同的原因。

绝对不会搜索带有通配符的单词。查询 *bieten* 旨在匹配 "xxbietenxx" 之类的内容。不过,在句子中查找单词 涉及通配符。这就是分析的目的。它将文本拆分为单词项。

解释每个查询:

  • bieten - 简单的术语查询。搜索给定的词。
  • "bieten" - 词组查询。分析并找到给定的多术语短语。在这种情况下,短语是一个术语,因此与术语查询相同。
  • "*bieten*" - 同样,短语查询。 不是 任何方式的通配符查询。不能在短语中使用通配符。分析器将删除标点符号,使其与上一个相同。
  • *bieten* - 通配符查询。这将匹配 "bietenxx"、"xxbieten" 和 "xxbietenxx",但不会被分析,因此不会匹配 post-分析项 "biet"。