elasticsearch - Elasticsearch 突出显示整个单词而不是单词的一部分

标签 elasticsearch autocomplete

如果查询是 Brid我想要<em>Brid</em>gitte在突出显示的字段中,而不是整个单词 <em>Bridgitte</em>

我的索引如下所示(我已按照此处建议的方式添加了 ngram 分析器 Highlighting part of word in elasticsearch )

{
"myindex": {
    "aliases": {},
    "mappings": {
        "mytype": {
            "properties": {
                "myarrayproperty": {
                    "properties": {
                        "mystringproperty1": {
                            "type": "string",
                            "term_vector": "with_positions_offsets",
                            "analyzer": "index_ngram_analyzer",
                            "search_analyzer": "search_term_analyzer"
                        },
                        "mystringproperty2": {
                            "type": "string",
                            "term_vector": "with_positions_offsets",
                            "analyzer": "index_ngram_analyzer",
                            "search_analyzer": "search_term_analyzer"
                        }
                    },
                    "mylongproperty": {
                        "type": "long"
                    },
                    "mydateproperty": {
                        "type": "date",
                        "format": "strict_date_optional_time||epoch_millis"
                    },
                    "mystringproperty3": {
                        "type": "string",
                        "term_vector": "with_positions_offsets",
                        "analyzer": "index_ngram_analyzer",
                        "search_analyzer": "search_term_analyzer"
                    },
                    "mystringproperty4": {
                        "type": "string",
                        "term_vector": "with_positions_offsets",
                        "analyzer": "index_ngram_analyzer",
                        "search_analyzer": "search_term_analyzer"
                    }
                }
            }
        },
        "settings": {
            "index": {
                "creation_date": "1498030893611",
                "analysis": {
                    "analyzer": {
                        "search_term_analyzer": {
                            "filter": "lowercase",
                            "type": "custom",
                            "tokenizer": "ngram_tokenizer"
                        },
                        "index_ngram_analyzer": {
                            "filter": ["lowercase"],
                            "type": "custom",
                            "tokenizer": "ngram_tokenizer"
                        }
                    },
                    "tokenizer": {
                        "ngram_tokenizer": {
                            "token_chars": ["letter", "digit"],
                            "min_gram": "1",
                            "type": "nGram",
                            "max_gram": "15"
                        }
                    }
                },
                "number_of_shards": "5",
                "number_of_replicas": "1",
                "uuid": "e5kBX-XRTKOqeAScO1Fs0w",
                "version": {
                    "created": "2040499"
                }
            }
        },
        "warmers": {}
    }
}

}

这是嵌入式 Elasticsearch 实例,不确定是否相关。

我的查询如下所示

    MatchQueryBuilder queryBuilder = matchPhrasePrefixQuery("_all", query).maxExpansions(50);
final SearchResponse response = client.prepareSearch("myindex")
    .setQuery(queryBuilder)
    .addHighlightedField("mystringproperty3", 0, 0)
    .addHighlightedField("mystringproperty4", 0, 0)
    .addHighlightedField("myarrayproperty.mystringproperty1", 0, 0)
    .setHighlighterRequireFieldMatch(false)
    .execute().actionGet();

而且它不起作用。我尝试将查询更改为queryStringQuery,但似乎它不支持按单词的一部分进行搜索。有什么建议吗?

最佳答案

这是不可能的。 Elasticsearch 对单词进行索引。从标记化的角度来看,您在这里无能为力。

您可能需要在搜索结果上编写包装器。 (不是 Elasticsearch 特定的)

关于elasticsearch - Elasticsearch 突出显示整个单词而不是单词的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44670456/

相关文章:

elasticsearch - 将数据从 SSD 引退到 HDD

python - 或者在 Elasticsearch 过滤器中

linux - 使用 sudo 的人类友好 bash 自动完成

java - 在 Java 中实现自动完成

autocomplete - 什么是 includeInputInList 属性用于 Material-ui 的自动完成?

elasticsearch - logstash文本文件输出配置

sql - 可以将Elasticsearch用于星型模式吗?

java - Elasticsearch 不处理 liquibase 加载的数据

elasticsearch - 如何创建具有多个权重不同的输入的CompletionField?

angularjs - md-自动完成功能不起作用