elasticsearch,elastica,Php,elasticsearch,Elastica" /> elasticsearch,elastica,Php,elasticsearch,Elastica" />

Php Elasticsearch-返回太多错误结果的研究

Php Elasticsearch-返回太多错误结果的研究,php,elasticsearch,elastica,Php,elasticsearch,Elastica,我有一个elasticsearch可以工作,但它实在太大了,它给了我太多与之无关的搜索结果。我正在寻找一种改进这些结果的方法 当我搜索术语音乐时,在一个假文本样本上,突出显示的术语是: 必须,非常,爱丽丝,内心,爱国,注意到 我认为ngram对我没有帮助,但我想我真的需要它来更好地搜索 以下是我的配置: { “碎片数”:1, “复制副本的数量”:0, “分析”:{ “分析器”:{ “默认值”:{ “类型”:“自定义”, “标记器”:“标准”, “过滤器”:[“小写”、“mySnowball”、“

我有一个elasticsearch可以工作,但它实在太大了,它给了我太多与之无关的搜索结果。我正在寻找一种改进这些结果的方法

当我搜索术语
音乐时,在一个假文本样本上,突出显示的术语是:
必须,非常,爱丽丝,内心,爱国,注意到

我认为ngram对我没有帮助,但我想我真的需要它来更好地搜索

以下是我的配置:

{
“碎片数”:1,
“复制副本的数量”:0,
“分析”:{
“分析器”:{
“默认值”:{
“类型”:“自定义”,
“标记器”:“标准”,
“过滤器”:[“小写”、“mySnowball”、“myNgram”]
},
“默认搜索”:{
“类型”:“自定义”,
“标记器”:“标准”,
“过滤器”:[“标准”、“小写”、“mySnowball”、“myNgram”]
}
},
“过滤器”:{
“mySnowball”:{
“类型”:“雪球”,
“语言”:“英语”
},
“明格拉姆”:{
“类型”:“ngram”,
“最小克”:2,
“最大克数”:6
}
}
}
}
这是我的要求:

{
“查询”:{
“布尔”:{
“应该”:[{
“匹配”:{
“内容”:“音乐”
}
}, {
“匹配”:{
“url”:“音乐”
}
}, {
“匹配”:{
“h1”:“音乐”
}
}, {
“匹配”:{
“h2”:“音乐”
}
}
],
“最小应匹配”:1
}
},
“min_分数”:8分
}
我的文件很简单:

content => text,
url => text,
h1 => text,
h2 => text,
还有映射:

$configMapping=[
'content'=>['type'=>'text','boost'=>6],
'url'=>['type'=>'text','boost'=>6],
“h1”=>[“type”=>“text”,“boost”=>9],
'h2'=>['type'=>'text','boost'=>7]
]

我欢迎任何允许我获得一致结果的修改。

正如您自己所说,使用“ngram”进行分析是您获得所有这些不相关结果的原因

在您得到的所有结果中,您可以看到与查询词“music”匹配的令牌(2个字符的令牌,作为n-gram的最小值): must、much、alice、inside、爱国者ic、非iced


首先从您的分析器中删除此筛选器,然后继续从中调整结果。

您可以共享一些示例索引数据和预期的搜索结果吗?这是我暂时解决问题所做的,目前我使用的是带有确切术语的搜索。下次我会更换谷歌搜索引擎^^