假设在我的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