【发布时间】:2021-11-03 19:36:34
【问题描述】:
我有一个包含 100 万个短语的索引,我想在索引中搜索一些意大利语查询短语(这不是问题)。问题在于检索匹配的顺序:我想首先获得完全匹配,所以我将默认相似性更改为“布尔”,我认为这是一个好主意,但有时它不起作用。例如:在我的索引中搜索包含单词“film cortometraggio”的短语,第一个匹配项是:
- Distribuito dalla General Film Company, il film- un cortometraggio in due bobine
- Distribuito dalla General Film Company, il film - un cortometraggio di 150 metri - uscì nelle sale cinematografiche
但是有一些更好的短语应该在这些短语之前返回:
- Robinet aviatore Robinet aviatore è un film cortometraggio del 1911 diretto da Luigi Maggi;
我认为应该首先返回最后一个短语,因为我要搜索的两个词之间没有空格。
使用 BM25 算法,我得到的第一个匹配项是“Pappi Corsicato Ha diretto film, cortometraggi, documentari e videoclip.”。在这种情况下,还应提供短语“Robinet aviatore Robinet aviatore è un film cortometraggio del 1911 diretto da Luigi Maggi;”因为是完全匹配,我不明白为什么算法会给另一个短语更高的分数。
我正在使用 Java Rest 高级客户端,我正在执行的搜索查询是简单的匹配短语查询,如下所示: searchSourceBuilder.query(QueryBuilders.matchPhraseQuery(field, text).slop(5)
这是我索引中文档的结构:
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.field("id",id);
builder.field("frase",frase);
}builder.endObject();
IndexRequest indexRequest = new IndexRequest(indice);
indexRequest.source(builder);
IndexResponse indexResponse = client.index(indexRequest, RequestOptions.DEFAULT);
有谁知道如何更改相似性标准以按正确顺序检索匹配项?
【问题讨论】:
-
你能显示你正在做的查询吗?
-
我是在 java 上用其余的高级客户端做的(但最后是用其余的客户端或 kibana 做的)并且查询是简单的匹配短语查询
-
1.您使用的是哪个版本的弹性搜索? 2.如果你使用DSL查询你得到相同的结果吗? 3. 我在 kibana 开发工具中使用匹配短语查询复制了你的场景,但我的第一个结果是 Robinet aviatore Robinet aviatore è un film cortometraggio del 1911 diretto da Luigi Maggi;
-
1)我使用的是 7.0.0 版本 2)我得到了理智的结果 我没有告诉你我使用的是带有“italian”词干分析器(而不是“light_italian”)的意大利语分析器,也许这就是我们得到不同结果的原因。
-
对不起,我用的是7.11.2版本
标签: elasticsearch