在Elasticsearch中查询以返回给定短语的所有结果

时间:2015-11-04 15:44:31

标签: java grails groovy elasticsearch lucene

我使用下面的代码来查询Elasticsearch索引,但我没有找回与给定短语匹配的所有文档。当我们搜索特定的特定文档时它返回特定文档例如,如果我要求短语'groovy',它不会带回我所有的文件名字段groovy。但如果我要搜索“Help.groovy”,它会让我回到Help.groovy。感谢有人可以帮助我。

private def performSearchUsingElasticSearch(String q) {
    def escaped =  QueryParser.escape(q.toLowerCase().trim())
    def result = elasticSearchService.search(escaped)
    return result
}

示例文档

 "hits": [
 {
    "_index": "a.b.c.d",
    "_type": "svnInfo",
    "_id": "183",
    "_score": 1,
    "_source": {
       "author": "abc1200",
       "name": "VendorSpec.groovy",
       "svnUrl": "http://svnrepo/tools/VendorSpec.groovy",
       "date": "Wed May 13 09:35:05 EDT 2015"
    }
 },  {
    "_index": "a.b.c.d",
    "_type": "svnInfo",
    "_id": "184",
    "_score": 1,
    "_source": {
       "author": "abc1200",
       "name": "Help.groovy",
       "svnUrl": "http://svnrepo/tools/Help.groovy",
       "date": "Wed May 13 09:35:05 EDT 2015"
    }

1 个答案:

答案 0 :(得分:1)

标准分析不会在字母之前和之后的期间中断代币(请参阅4.1 of UAX #29部分,尤其是规则WB6 and WB7)。

您可能需要考虑使用其他分析器。 simple可能是个不错的选择。它不是实现那个文本分割标准,而是简单地将标记定义为相邻字母的序列,看起来可能是你想要的。