Elasticsearch匹配字符串与like运算符

问题描述 投票:0回答:3

我会查询elasticsearch以检索具有字段值的所有文档,如给定字符串。

例如,field LIKE "abc"必须返回

  • “ABC”
  • “ABCDEF”
  • “A B C D”
  • “ABC1”

所以所有的字段都有"abc"字符串。

我尝试此查询但只返回field = "abc"文档:

{"query":{"more_like_this":{"fields":["FIELD"],"like_text":"abc","min_term_freq" : 1,"max_query_terms" : 12}}}

什么是正确的查询?

谢谢

java elasticsearch elasticsearch-query
3个回答
0
投票

如果您尝试执行前缀查询,则可以使用此方法。

{ "query": {
  "prefix" : { "field" : "abc" }
}

请参阅ElasticSearch前缀查询ElasticSearch Prefix Query


0
投票

虽然你的问题不完整。我会尽力给你一些想法。

一种方法肯定是前缀查询,但更有效的是构建边缘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"
                            }
                        }
                    }
                }
            }
        }

-1
投票

您应该能够执行此处所述的通配符查询。

Elasticsearch like query

{
  "query": {
    "wildcard": {
      "<<FIELD NAME>>": "*<<QUERY TEXT>>*"
    }
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.