ElasticSearch:使用edge_ngram和模糊性进行部分/完全评分

在ElasticSearch中,我尝试使用带有模糊性的edge_ngram获得正确的评分。我希望精确匹配具有最高的分数,而子匹配具有较低的分数。以下是我的设置和评分结果。

settings: {

number_of_shards: 1,

analysis: {

filter: {

ngram_filter: {

type: 'edge_ngram',

min_gram: 2,

max_gram: 20

}

},

analyzer: {

ngram_analyzer: {

type: 'custom',

tokenizer: 'standard',

filter: [

'lowercase',

'ngram_filter'

]

}

}

}

},

mappings: [{

name: 'voter',

_all: {

'type': 'string',

'index_analyzer': 'ngram_analyzer',

'search_analyzer': 'standard'

},

properties: {

last: {

type: 'string',

required : true,

include_in_all: true,

term_vector: 'yes',

index_analyzer: 'ngram_analyzer',

search_analyzer: 'standard'

},

first: {

type: 'string',

required : true,

include_in_all: true,

term_vector: 'yes',

index_analyzer: 'ngram_analyzer',

search_analyzer: 'standard'

},

}

}]

在执行了名字为“ Michael”的POST之后,我进行了如下查询,并更改了“ Michael”,“ Michae”,“ Micha”,“ Mich”,“

Mic”和“ Mi”。

GET voter/voter/_search

{

"query": {

"match": {

"_all": {

"query": "Michael",

"fuzziness": 2,

"prefix_length": 1

}

}

}

}

我的成绩是:

-"Michael": 0.19535106

-"Michae": 0.2242768

-"Micha": 0.24513611

-"Mich": 0.22340237

-"Mic": 0.21408978

-"Mi": 0.15438235

如您所见,得分结果没有达到预期。我希望“ Michael”的得分最高,而“ Mi”的得分最低

任何帮助,将不胜感激!

回答:

解决此问题的一种方法是像这样在映射中添加文本的原始版本

                   last: {

type: 'string',

required : true,

include_in_all: true,

term_vector: 'yes',

index_analyzer: 'ngram_analyzer',

search_analyzer: 'standard',

"fields": {

"raw": {

"type": "string" <--- index with standard analyzer

}

}

},

first: {

type: 'string',

required : true,

include_in_all: true,

term_vector: 'yes',

index_analyzer: 'ngram_analyzer',

search_analyzer: 'standard',

"fields": {

"raw": {

"type": "string" <--- index with standard analyzer

}

}

},

你也可以把它 与index : not_analyzed

然后您可以像这样查询

{

"query": {

"bool": {

"should": [

{

"match": {

"_all": {

"query": "Michael",

"fuzziness": 2,

"prefix_length": 1

}

}

},

{

"match": {

"last.raw": {

"query": "Michael",

"boost": 5

}

}

},

{

"match": {

"first.raw": {

"query": "Michael",

"boost": 5

}

}

}

]

}

}

}

匹配更多条款的文档得分更高。您可以boost根据需要指定。

以上是 ElasticSearch:使用edge_ngram和模糊性进行部分/完全评分 的全部内容, 来源链接: utcz.com/qa/421448.html

回到顶部