让我们说,在我的弹性搜索索引中,我有一个名为dots的字段,它将包含一串标点符号分隔的单词(例如first.second.third)。
let's say that in my elasticsearch index I have a field called "dots" which will contain a string of punctuation separated words (e.g. "first.second.third").
我需要搜索例如first.second,然后获取所有条目,其点字段包含一个正好为first.second的字符串,或以first.second开头。
I need to search for e.g. "first.second" and then get all entries whose "dots" field contains a string being exactly "first.second" or starting with "first.second.".
我有一个问题,了解文本查询的工作原理,至少我无法创建一个查询作业。
I have a problem understanding how the text querying works, at least I have not been able to create a query which does the job.
推荐答案p> Elasticsearch有路径层次令牌化器,这是正是为这种用例创建的。以下是如何为您的索引设置示例:
Elasticsearch has Path Hierarchy Tokenizer that was created exactly for such use case. Here is an example of how to set it for your index:
# Create a new index with custom path_hierarchy analyzer # See www.elasticsearch/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更多推荐
如何在弹性搜索的前缀匹配
发布评论