我正在使用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"
}
}
}
}
但正如我上面写的那样,所有条款都必须在文本中,所以不仅仅是一个二元组。
答案 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