2013-10-07 139 views
0

我使用演示IndexFiles和SearchFiles类来索引和搜索哪些在org.apache.lucene.demo数据包。Lucene:完全匹配不首先显示

我的问题是当我使用包含多个单词的查询时,我没有得到具有完全匹配的结果。例如:

Enter query: 
"natural language" 
Searching for: "natural language" 
298 total matching documents 
1. download\researchers.uq.edu.au\fields-of-research\natural-language-processing 
.txt 
2. download\researchers.uq.edu.au\research-project\16267.txt 
3. download\researchers.uq.edu.au\research-project\16279.txt 
4. download\researchers.uq.edu.au\research-project\18361.txt 
5. download\www.uq.edu.au\news\%3Farticle%3D2187.txt 
6. download\researchers.uq.edu.au\researcher\2115.txt 
7. download\ceit.uq.edu.au\content\2013-2014-summer-research-scholarship-project 
s-dr-alan-cody%3Fpage%3D1.txt 
8. download\ceit.uq.edu.au\content\2013-2014-summer-research-scholarship-project 
s-dr-alan-cody%3Fpage%3D2.txt 
9. download\ceit.uq.edu.au\content\2013-2014-summer-research-scholarship-project 
s-dr-alan-cody.txt 
10. download\www.ceit.uq.edu.au\content\2013-2014-summer-research-scholarship-pr 
ojects-dr-alan-cody.txt 
Press (n)ext page, (q)uit or enter number to jump to a page. 

不具有相同的结果:

Enter query: 
natural language 
Searching for: natural language 
54307 total matching documents 
1. download\cyberschool.library.uq.edu.au\display_resource.phtml%3Frid%3D190.txt 

2. download\cyberschool.library.uq.edu.au\display_resource.phtml%3Frid%3D576.txt 

3. download\cyberschool.library.uq.edu.au\display_resource.phtml%3Frid%3D46.txt 
4. download\espace.library.uq.edu.au\view\UQ%3A166163.txt 
5. download\cyberschool.library.uq.edu.au\display_resource.phtml%3Frid%3D108.txt 

6. download\cyberschool.library.uq.edu.au\display_resource.phtml%3Frid%3D70.txt 
7. download\cyberschool.library.uq.edu.au\display_resource.phtml%3Frid%3D708.txt 

8. download\researchers.uq.edu.au\fields-of-research\natural-language-processing 
.txt 
9. download\researchers.uq.edu.au\research-project\16267.txt 
10. download\cyberschool.library.uq.edu.au\display_resource.phtml%3Frid%3D117.tx 
t 
Press (n)ext page, (q)uit or enter number to jump to a page. 

例如第一个匹配的文件甚至没有包含“语言”关键字。

如果我使用explain()方法中IndexSearcher类,然后我得到这个结果的第一个1:

1. download\cyberschool.library.uq.edu.au\display_resource.phtml%3Frid%3D190.txt 
0.70643383 = (MATCH) sum of: 
    0.5590494 = (MATCH) weight(contents:natural in 62541) [DefaultSimilarity], result of: 
    0.5590494 = score(doc=62541,freq=4.0 = termFreq=4.0 
), product of: 
     0.8091749 = queryWeight, product of: 
     4.4216847 = idf(docFreq=13111, maxDocs=401502) 
     0.18300149 = queryNorm 
     0.6908882 = fieldWeight in 62541, product of: 
     2.0 = tf(freq=4.0), with freq of: 
      4.0 = termFreq=4.0 
     4.4216847 = idf(docFreq=13111, maxDocs=401502) 
     0.078125 = fieldNorm(doc=62541) 
    0.1473844 = (MATCH) weight(contents:language in 62541) [DefaultSimilarity], result of: 
    0.1473844 = score(doc=62541,freq=1.0 = termFreq=1.0 
), product of: 
     0.5875679 = queryWeight, product of: 
     3.2107275 = idf(docFreq=44012, maxDocs=401502) 
     0.18300149 = queryNorm 
     0.25083807 = fieldWeight in 62541, product of: 
     1.0 = tf(freq=1.0), with freq of: 
      1.0 = termFreq=1.0 
     3.2107275 = idf(docFreq=44012, maxDocs=401502) 
     0.078125 = fieldNorm(doc=62541) 

如果我点击下一步,找到一个采用这样:

19. download\www.uq.edu.au\news\%3Farticle%3D2187.txt 
0.47449595 = (MATCH) sum of: 
    0.2795247 = (MATCH) weight(contents:natural in 35173) [DefaultSimilarity], result of: 
    0.2795247 = score(doc=35173,freq=4.0 = termFreq=4.0 
), product of: 
     0.8091749 = queryWeight, product of: 
     4.4216847 = idf(docFreq=13111, maxDocs=401502) 
     0.18300149 = queryNorm 
     0.3454441 = fieldWeight in 35173, product of: 
     2.0 = tf(freq=4.0), with freq of: 
      4.0 = termFreq=4.0 
     4.4216847 = idf(docFreq=13111, maxDocs=401502) 
     0.0390625 = fieldNorm(doc=35173) 
    0.19497125 = (MATCH) weight(contents:language in 35173) [DefaultSimilarity], result of: 
    0.19497125 = score(doc=35173,freq=7.0 = termFreq=7.0 
), product of: 
     0.5875679 = queryWeight, product of: 
     3.2107275 = idf(docFreq=44012, maxDocs=401502) 
     0.18300149 = queryNorm 
     0.33182758 = fieldWeight in 35173, product of: 
     2.6457512 = tf(freq=7.0), with freq of: 
      7.0 = termFreq=7.0 
     3.2107275 = idf(docFreq=44012, maxDocs=401502) 
     0.0390625 = fieldNorm(doc=35173) 

哪一页本身包含确切的关键词“自然语言”。所以我的问题是:

1)为什么Lucene首先不显示完全匹配?

2)为什么Lucene显示的结果甚至没有包含关键字?

3)在哪里/如何改变它,以便首先显示完全匹配的,然后更相关的?

回答

0

1 - 它并不打算。请参阅Lucene query syntax上的文档。查询natural language是由两个术语组成的查询。对于Lucene而言,它们本身并不偏爱这些术语。如果你想找到精确匹配,短语查询是正确的做法,像"natural language"

2 - 其中包括你的交代确实包含两个方面同时匹配结果,请参见:

0.2795247 = (MATCH) weight(contents:natural in 35173) [DefaultSimilarity], result of: 
    0.2795247 = score(doc=35173,freq=4.0 = termFreq=4.0 
... 
0.19497125 = (MATCH) weight(contents:language in 35173) [DefaultSimilarity], result of: 
    0.19497125 = score(doc=35173,freq=7.0 = termFreq=7.0 

根据在Lucene中,它在文档中找到4次“自然”一词,在内容字段(我认为是默认字段)中找到7次“语言”。

3 - 查看查询语法分析器的语法,以查看对您最有意义的内容。这听起来像你可能会发现Proximity Searches有用。

如果你只是想简单地得到短语匹配的后跟别人,你可以使用的东西线沿线的:

"natural language" natural language 
+0

谢谢你,但'接近Search'实际上不会单独找到的话。所以这不是我之后的情况 –

+0

当然,这就是为什么提供了另一种方法的原因,它将单独的术语查询与短语查询相结合,这应该很好地服务。这是不是足够的是某种方式? – femtoRgon

+0

我已经认为,实际上,但对于更大的查询,即使对于4个关键字,我也会有3个查询,其中包含2个措辞,2个查询,3个措辞和查询本身。我开发了一种算法来查找需要O(n^3)时间的子查询,所以如果考虑10个关键字查询,那么效果不好。 我想知道是否可以将接近搜索与默认搜索结合起来? –