2016-03-08 67 views
1

我试图用通配符和_all搜索文档。但是似乎没有可能在_all上使用通配符获得提升结果?Elasticsearch增强与Wildcardsearch在_all

MappingRequest:

"theboostingclass": { 
    "properties": { 
     "Important": { 
     "boost": 2.0, 
     "type": "string" 
     }, 
     "LessImportant": { 
     "type": "string" 
     }, 
     "Garbage": { 
     "type": "string" 
     } 
    } 
    } 
} 

索引:

{ 
    "index" : 
    { 
     "_index":"boosting", 
     "_type":"theboostingclass" 
    } 
} 
    { 
     "Important":"bomb", 
     "LessImportant":"kruka", 
     "Garbage":"kalkon" 
    } 
{ 
    "index" : 
    { 
     "_index":"boosting", 
     "_type":"theboostingclass" 
    } 
} 
{ 
    "Important":"kalkon", 
    "LessImportant":"bomb", 
    "Garbage":"bomber" 
} 
{ 
    "index" : 
    { 
     "_index":"boosting", 
     "_type":"theboostingclass" 
    } 
} 
{ 
    "Important":"kruka", 
    "LessImportant":"bomber", 
    "Garbage":"bomb" 
} 

查询

"query": { 
    "wildcard": { 
     "_all": { 
     "value": "*bomb*" 
     } 
    } 
    } 

结果returs全部命中以1分和一个看似随机的顺序。这并不是什么后来的。我希望在“重要”字段中获得更高的分数。

如果我对所有3个字段进行通配符搜索,得分似乎是正确的。但是我想在_all上使用它。有任何想法吗?

回答

0

请参阅文档: https://www.elastic.co/guide/en/elasticsearch/reference/current/query-dsl-multi-term-rewrite.html。请注意,默认情况下它的默认值为常量的原因是性能。

我相信你需要进行如下修改查询:

"query": { 
    "wildcard": { 
     "_all": { 
     "value": "*bomb*", 
     "rewrite": "scoring_boolean" 
     } 
    } 
    } 
+0

哇谢谢。至少现在我得分了。不幸的是,我不能让他得分更高的“重要”领域。我希望在单场比赛中得分高于其他场上的命中。 (我试图提高它,并降低其他)我一定错过了什么..? 编辑:我试图添加两个新项目。一个具有重要的精确匹配字段,另一个具有垃圾上完全匹配的字段。这两个“炸弹”。重要领域的成绩比其他成绩低,即使其成绩稍逊一筹。这怎么可能? – Evelie

+0

我在猜测,但它看起来有两个匹配的其他两个,第一个只有一个。 “轰炸机”也是一场比赛。完全匹配在这个查询中完全不重要。如果你想提高精确匹配,你将不得不增加另一个参数到你的查询。 –

+0

是的,它看起来像。但这正是我试图用提升来解决的问题。因此,即使有两场比赛,我想在“重要”栏目上的比赛得分更高。 – Evelie