为了账号安全,请及时绑定邮箱和手机立即绑定

弹性搜索:部分搜索无法正常工作

弹性搜索:部分搜索无法正常工作

富国沪深 2023-03-08 16:18:52
部分搜索不适用于多个字段。数据:-“ Sales inquiries generated”。{    "query_string": {        "fields": ["name", "title", "description", "subject"],        "query": search_data+"*"    }}案例 1:当我将搜索数据作为“inquiri”传递时它工作正常,但是当我将搜索数据作为“inquirie”传递时它不起作用。案例 2:当我将搜索数据作为“销售”传递时,它工作正常,但是当我将搜索数据作为“销售”传递时,它不起作用。案例 3:当我将搜索数据作为“generat”传递时,它工作正常,但是当我将搜索数据作为“generate”传递时,它不起作用。我这样定义我的领域。text_analyzer = analyzer("text_analyzer", tokenizer="standard", filter=["lowercase", "stop", "snowball"])name = Text(analyzer=text_analyzer, fields={"raw": Keyword()})title = Text(analyzer=text_analyzer, fields={"raw": Keyword()})subject = Text(analyzer=text_analyzer, fields={"raw": Keyword()})我的代码有什么问题?任何帮助将非常感激!提前致谢。
查看完整描述

1 回答

?
慕少森

TA贡献2019条经验 获得超9个赞

这是由于使用了snowball词干的令牌过滤器而发生的,请参阅官方雪球文档以获取更多信息。

我使用您的设置创建了相同的分析器,以查看为您的文本生成的标记,因为当索引标记与搜索词标记匹配时,搜索就会发生。

ES 提供了很好的 REST api,你可以很容易地重现这个问题:

使用您的设置创建索引

{

    "settings": {

        "analysis": {

            "analyzer": {

                "my_analyzer": {

                    "tokenizer": "standard",

                    "filter": [

                        "lowercase",

                        "snowball",

                        "stop"

                    ]

                }

            }

        }

    },

    "mappings": {

        "properties": {

            "name": {

                "type": "text",

                "analyzer": "my_analyzer"

            }

        }

    }

}

创建索引后,您可以使用分析 API查看为您的文本生成的标记。

POST http://{{hostname}}:{{port}}/{{index-name}}/_analyze


{

  "analyzer": "my_analyzer",

  "text": "Sales inquiries generated"

}


{

    "tokens": [

        {

            "token": "sale",

            "start_offset": 0,

            "end_offset": 5,

            "type": "<ALPHANUM>",

            "position": 0

        },

        {

            "token": "inquiri",

            "start_offset": 6,

            "end_offset": 15,

            "type": "<ALPHANUM>",

            "position": 1

        },

        {

            "token": "generat",

            "start_offset": 16,

            "end_offset": 25,

            "type": "<ALPHANUM>",

            "position": 2

        }

    ]

}

您可以看到所有与您的搜索查询匹配的标记都是相同的,因此您将获得其他搜索词的结果,这意味着在查询而不是原始查询时,您使用的是文本字段的关键字部分


查看完整回答
反对 回复 2023-03-08
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信