我应该使用什么过滤器来匹配字符串中的确切术语?

时间:2016-06-21 16:50:04

标签: java elasticsearch

我正在使用ElasticSearch 2.3.1。

我需要创建一个查询,检查文本中是否存在特定术语(单词或单词列表)。基本上就像喜欢运算符一样。

如果我使用bool / must / match过滤器,我可以按分数订购文件,但我必须删除没有我需要搜索的所有条款的文件。

目前我正在使用2gram,这是映射...

{
    "settings": {
        "analysis": {
            "filter": {             
                "2gramsto3_filter": {
                    "type":     "ngram",
                    "min_gram": 2,
                    "max_gram": 3
                }                
            },        
            "analyzer": {
                "2gramsto3": {
                    "type":      "custom",
                    "tokenizer": "standard",
                    "filter":   [
                        "lowercase",
                        "2gramsto3_filter"
                    ]
                }
            }
        }
    },  
    "mappings": {
        "agents": {
            "properties": {                             
                "cv": {
                    "type": "string",
                    "analyzer": "2gramsto3"                 
                }
        }
    }
}

但正如我上面写的那样,所有条款都必须在文本中,所以不仅仅是一个二元组。

1 个答案:

答案 0 :(得分:0)

如果您需要按一组特定字词匹配,那么bool/must/match_phrase可能比bool/must/match

更合适

有关此内容的快速参考可以在文档的“入门”部分找到,您可以在此处找到:https://www.elastic.co/guide/en/elasticsearch/reference/current/_executing_searches.html

从以上来源:

此示例是match(match_phrase)的变体,它返回地址中包含短语“mill lane”的所有帐户:

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_phrase": { "address": "mill lane" } }
}'

可以在以下位置找到ES文档的更多详细信息:https://www.elastic.co/guide/en/elasticsearch/reference/current/_executing_searches.html