我会查询elasticsearch以检索具有字段值的所有文档,如给定字符串。
例如,field LIKE "abc"
必须返回
所以所有的字段都有"abc"
字符串。
我尝试此查询但只返回field = "abc"
文档:
{"query":{"more_like_this":{"fields":["FIELD"],"like_text":"abc","min_term_freq" : 1,"max_query_terms" : 12}}}
什么是正确的查询?
谢谢
如果您尝试执行前缀查询,则可以使用此方法。
{ "query": {
"prefix" : { "field" : "abc" }
}
请参阅ElasticSearch前缀查询ElasticSearch Prefix Query
虽然你的问题不完整。我会尽力给你一些想法。
一种方法肯定是前缀查询,但更有效的是构建边缘ngram分析器。这样你就可以在插入和查询上准备好你的数据了。 edge ngram也是最灵活的功能,因为您可以自动填充以任何顺序出现的单词。如果您不需要这样做,但只需要“在键入时搜索”查询,那么最好的方法是使用完成建议器。如果你需要找到出现在单词中间的字符串,那么你可以检查ngram分析器。
以下是我如何从代码中设置边缘ngram分析器。
"settings": {
"analysis": {
"filter" : {
"edge_filter" : {
"type" : "edge_ngram",
"min_gram": 1,
"max_gram": 256
}
},
"analyzer": {
"edge_analyzer" : {
"type" : "custom",
"tokenizer": "whitespace",
"filter" : ["lowercase", "edge_filter"]
},
"lowercase_whitespace": {
"type": "custom",
"tokenizer": "whitespace",
"filter": [ "lowercase" ]
}
}
}
},
"mappings": {
"my_type": {
"properties": {
"name": {
"type": "keyword",
"fields": {
"suggest": {
"type": "text",
"analyzer" : "edge_analyzer",
"search_analyzer": "lowercase_whitespace"
}
}
}
}
}
}
您应该能够执行此处所述的通配符查询。
{
"query": {
"wildcard": {
"<<FIELD NAME>>": "*<<QUERY TEXT>>*"
}
}
}