我意识到通过
查询ElasticsearchGET animals/_search
{
"query": {
"match_phrase_prefix": {
"Title": "ti"
}
}
}
返回
如果不维护不同的match_phrase_prefix
字段只是为了应用此处描述的不同分析器,我如何才能实现真正的match_token_prefix
而不是Title
:
Elasticsearch "starts with" first word in phrases
---更新21.03.2017 ---
我需要基于令牌的搜索以及" LIKE前缀%"在字段Title
上搜索!!!而且我不想为每个分析器Title_standard
,Title_keyword
和Title_xyz
维护额外的字段。如果我的模型的所有文本属性都应该像这样处理,那将是一场噩梦。除了双数据存储之外,我必须在向客户显示搜索命中之前重新翻译所有属性名称!
(可以使用Elasticsearch 5)
答案 0 :(得分:0)
为了实现它,您需要修改索引映射,以便不按空格分割您的标记,并将字符串保持为“原样”。这是默认行为,这就是match_phrase_prefix
实际工作的方式(与发生在下面的短语跨度相同)。
更新您的地图(重要部分为"tokenizer" : "keyword"
):
curl -XPUT http://localhost:9200/my_animals -d '
{
"settings":{
"analysis":{
"analyzer":{
"my_analyzer":{
"type":"custom",
"tokenizer": "keyword",
"filter":[
"lowercase"
]
}
}
}
},
"mappings": {
"animal": {
"properties": {
"Title": {
"type": "string",
"analyzer": "my_analyzer"
}
}
}
}
}'
之后,您可以对prefix
字段使用纯Title
次查询:
curl -XGET http://localhost:9200/my_animals/_search -d '
{
"query": {
"prefix": {
"Title": "ti"
}
}
}'