繁体   English   中英

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

[英]Elastic search: Partial search not working properly

部分搜索不适用于多个字段。

数据:-“ Sales inquiries generated ”。

{
    "query_string": {
        "fields": ["name", "title", "description", "subject"],
        "query": search_data+"*"
    }
}
  • 案例1:当我将搜索数据作为“inquiri”传递时,它工作正常,但是当我将搜索数据作为“inquirie”传递时,它不起作用。

  • 案例2:当我将搜索数据作为“销售”传递时,它工作正常,但是当我将搜索数据作为“销售”传递时,它不起作用。

  • 案例3:当我将搜索数据作为“生成”传递时,它工作正常,但是当我将搜索数据作为“生成”传递时,它不起作用。

我以这种方式定义了我的领域。

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()})

我的代码有什么问题? 任何帮助将非常感激。 提前致谢。

这是由于使用了词干的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
        }
    ]
}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM