gpt4 book ai didi

lucene - 如何在 ElasticSearch 中查询带有停用词的短语

转载 作者:行者123 更新时间:2023-11-29 02:52:11 24 4
gpt4 key购买 nike

我正在为一些启用停用词的文本编制索引,我想使用“匹配短语”查询来搜索这些文本,但看起来停用词仍在考虑术语位置。

建筑索引:

PUT /fr_articles
{
"settings": {
"analysis": {
"analyzer": {
"stop": {
"type": "standard",
"stopwords" : ["the"]
}
}
}
},
"mappings": {
"test": {
"properties": {
"title": {
"type": "string",
"analyzer": "stop"
}
}
}
}
}

添加文档:

POST /fr_articles/test/1
{
"title" : "Tom the king of Toulon!"
}

搜索:

POST /fr_articles/_search
{
"fields": [
"title"
],
"explain": true,
"query": {
"match": {
"title": {
"query": "tom king",
"type" : "phrase"
}
}
}
}

没有找到;-(

有办法解决吗?或者可能有多个跨度查询,但我希望术语彼此接近。

谢谢你,

最佳答案

位置增量导致了这个问题,是的。虽然停用词可能已经消失且不可搜索,但它仍然不会将这两个词推到一起,因此查询 "tom the king" 找不到 "tom king" 也不是 “这样汤姆就不会成为他们的国王”

通常,当您使用过滤器删除分析中的某些内容时,它并不像从未存在过一样。 StopFilter 的目的尤其在于删除由不感兴趣的字词引起的搜索命中。它不是改变文档或句子的结构。

您过去可以在 StopFilter 上禁用位置增量,但从 Lucene 4.4 开始,该选项已被删除。


好吧,忘掉那个 CharFilter 的傻瓜吧。丑陋的 hack,不要那样做。

要在不使用位置增量的情况下进行查询,您需要在查询解析器中而不是在分析中进行配置。这可以在 elasticsearch 中完成,使用 Query String Query , enable_position_increments 设置为 false。

类似于:

{
"query_string" : {
"default_field" : "title",
"query" : "\"tom king\""
"enable_position_increments" : false
}
}

作为兴趣点,原始 Lucene 中的类似解决方案,通过设置 QueryParser.setEnablePositionIncrements .

关于lucene - 如何在 ElasticSearch 中查询带有停用词的短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31719249/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com