我在查找一些有关我的lucene搜索发生了什么的信息时遇到了一些麻烦。Lucene通配符和结尾字母'''
(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/
现在我希望能够做的就是寻找一个术语,即手套*这最终成为(()()())
我不明白为什么这个被翻译这样在那里,并与我的查询或我的索引问题?
LUKE告诉我,结构解释如下
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*
这似乎很奇怪,我在多个层次上
- 为什么我被记空白的条款吗?
- 为什么我会混合使用TermQuery,ConstantScoreQuery和BooleanQuery?
- ConstantScoreQuery在哪里生成?
应该指出的一切工作正常适合我当我搜索一个术语与IE IE手套或出了通配符只是两者的组合似乎打破查询。
我有一个索引,我认为应该匹配它 - ***使用450070 ***手套一次性乳胶低粉中385057 - 我使用的是EnglishAnalyser是作为snowballAnalyser的一部分。是否应该创建一段代码,预先执行我的搜索,然后添加通配符? – Spaceman
Pre-stemming prefix queries would这是一种可能性,当然,思考它,但是,分析和设置通配符查询词意味着什么意思lucene绕过分析器的通配符的一个(也许是* *)原因是,对于什么来说,有什么含糊不清的分析通配符实际上意味着 – femtoRgon
足够公平,我将继续思考我将采取的行动方式。 – Spaceman