首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简单查询搜索是否与shingles兼容?

简单查询搜索是否与shingles兼容?
EN

Stack Overflow用户
提问于 2015-12-17 23:35:26
回答 1查看 790关注 0票数 0

我想知道是否可以在简单的查询字符串查询中使用shingles。我对相关字段的映射如下:

代码语言:javascript
复制
{
    "text_2": {
        "type": "string",
        "analyzer": "shingle_analyzer"
    }
}

分析器和过滤器的定义如下:

代码语言:javascript
复制
"analyzer": {
    "shingle_analyzer": {
        "type": "custom",
        "tokenizer": "standard",
        "filter": ["standard", "custom_delimiter", "lowercase", "stop", "snowball", "filter_shingle"]
    }
},
"filter": {
    "filter_shingle":{
       "type":"shingle",
       "max_shingle_size":5,
       "min_shingle_size":2,
       "output_unigrams":"true"
    },
    "custom_delimiter": {
        "type": "word_delimiter",
        "preserve_original": True
    }
}

我正在执行以下搜索:

代码语言:javascript
复制
{
    "query": {
        "bool": {
            "must": [
                {
                    "simple_query_string": {
                        "analyzer": "shingle_analyzer",
                        "fields": [
                            "text_2"
                        ],
                        "lenient": "false",
                        "default_operator": "and",
                        "query": "porsches small red"
                    }
                }
            ]
        }
    }
}

现在,我有了一个text_2 = small red porsches的文档。由于我使用的是AND操作符,所以我希望我的文档不匹配,因为上面的查询应该生成一个"porsches“,这是一个不同的顺序。然而,当我看到比赛的解释时,我只看到一个单词“红色”“小”“保时捷”,这当然是匹配的。

SQS与板条不兼容吗?

EN

回答 1

Stack Overflow用户

发布于 2015-12-18 08:46:28

答案是“是的,但是.”。

考虑到text_2字段可能在映射中有标准的索引分析器(根据您正在看到的解释),您所看到的是正常的,即为small red porsches生成和索引的唯一标记是smallredporsches

在查询方面,您可能使用的是output_unigrams设置为true (默认)的板形分析器,这意味着除了bigram之外,还将生成unigram标记(同样根据您正在看到的解释)。这些单格是你得到火柴的唯一原因。如果您想在bigram上匹配,那么一种解决方案是在索引时使用板条分析器,也就是,以便除了unigram smallredporsches之外,还可以生成bigram small redred porsches并进行索引。

然后,在查询时,unigram也会匹配,但是small red bigram也一定会匹配。为了只匹配大图,您可以使用另一个板条分析器,只用于查询时间,其output_unigrams设置为false,因此只从搜索输入中生成bigram。如果您的查询只包含一个单词(例如,porsches),那么该板条分析器将只生成一个词(因为output_unigrams_if_no_shingles是真的),并且查询仍然会与您的文档匹配。如果不想这样做,您可以简单地将output_unigrams_if_no_shingles设置为false在您的板条搜索分析器。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34346272

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档