如何在Elasticsearch中匹配前缀

假设在我的Elasticsearch索引中,我有一个名为“点”的字段,其中将包含由标点符号分隔的字符串(例如“ first.second.third”)。

我需要搜索例如“ first.second”,然后获取其“点”字段包含正好是“ first.second”或以“

first.second”开头的字符串的所有条目。

我在理解文本查询的工作方式时遇到问题,至少我无法创建执行此任务的查询。

回答:

Elasticsearch的Path Hierarchy

Tokenizer正是针对这种用例而创建的。这是如何为您的索引设置它的示例:

# Create a new index with custom path_hierarchy analyzer 

# See http://www.elasticsearch.org/guide/reference/index-modules/analysis/pathhierarchy-tokenizer.html

curl -XPUT "localhost:9200/prefix-test" -d '{

"settings": {

"analysis": {

"analyzer": {

"prefix-test-analyzer": {

"type": "custom",

"tokenizer": "prefix-test-tokenizer"

}

},

"tokenizer": {

"prefix-test-tokenizer": {

"type": "path_hierarchy",

"delimiter": "."

}

}

}

},

"mappings": {

"doc": {

"properties": {

"dots": {

"type": "string",

"analyzer": "prefix-test-analyzer",

//"index_analyzer": "prefix-test-analyzer", //deprecated

"search_analyzer": "keyword"

}

}

}

}

}'

echo

# Put some test data

curl -XPUT "localhost:9200/prefix-test/doc/1" -d '{"dots": "first.second.third"}'

curl -XPUT "localhost:9200/prefix-test/doc/2" -d '{"dots": "first.second.foo-bar"}'

curl -XPUT "localhost:9200/prefix-test/doc/3" -d '{"dots": "first.baz.something"}'

curl -XPOST "localhost:9200/prefix-test/_refresh"

echo

# Test searches.

curl -XPOST "localhost:9200/prefix-test/doc/_search?pretty=true" -d '{

"query": {

"term": {

"dots": "first"

}

}

}'

echo

curl -XPOST "localhost:9200/prefix-test/doc/_search?pretty=true" -d '{

"query": {

"term": {

"dots": "first.second"

}

}

}'

echo

curl -XPOST "localhost:9200/prefix-test/doc/_search?pretty=true" -d '{

"query": {

"term": {

"dots": "first.second.foo-bar"

}

}

}'

echo

curl -XPOST "localhost:9200/prefix-test/doc/_search?pretty=true&q=dots:first.second"

echo

以上是 如何在Elasticsearch中匹配前缀 的全部内容, 来源链接: utcz.com/qa/418990.html

回到顶部