2

我是 Elasticsearch 的新手,在查询方面遇到了问题。

我这样索引字符串:

my-super-string
my-other-string
my-little-string

这个字符串是蛞蝓。因此,它们不是空格,只有字母数字字符。相关字段的映射只是“type=string”。

我正在使用这样的查询:

{ "query":{ "query_string":{ "query": "*"+<MY_QUERY>+"*", "rewrite": "top_terms_10" } }}

其中“MY_QUERY”也是一个蛞蝓。例如“我的超级”之类的东西。

当搜索“我的”时,我得到了结果。

搜索“my-super”时,我没有得到任何结果,我想要“my-super-string”。

有人可以帮我吗?谢谢!

4

1 回答 1

1

我建议使用 match_phrase 而不是使用带有前导和尾随通配符的查询字符串。即使是标准分析器也应该能够正确地将 slug 拆分为标记,因此不需要通配符。

curl -XPUT "localhost:9200/slugs/doc/1" -d '{"slug": "my-super-string"}'
echo
curl -XPUT "localhost:9200/slugs/doc/2" -d '{"slug": "my-other-string"}'
echo
curl -XPUT "localhost:9200/slugs/doc/3" -d '{"slug": "my-little-string"}'
echo
curl -XPOST "localhost:9200/slugs/_refresh"
echo
echo "Searching for my"
curl "localhost:9200/slugs/doc/_search?pretty=true&fields=slug" -d '{"query" : { "match_phrase": {"slug": "my"} } }'
echo
echo "Searching for my-super"
curl "localhost:9200/slugs/doc/_search?pretty=true&fields=slug" -d '{"query" : { "match_phrase": {"slug": "my-super"} } }'
echo
echo "Searching for my-other"
curl "localhost:9200/slugs/doc/_search?pretty=true&fields=slug" -d '{"query" : { "match_phrase": {"slug": "my-other"} } }'
echo
echo "Searching for string"
curl "localhost:9200/slugs/doc/_search?pretty=true&fields=slug" -d '{"query" : { "match_phrase": {"slug": "string"} } }'

或者,您可以创建自己的分析器,仅在“-”上将 slug 拆分为标记

curl -XDELETE localhost:9200/slugs
curl -XPUT localhost:9200/slugs -d '{
    "settings": {
        "index": {
            "number_of_shards": 1,
            "number_of_replicas": 0,
            "analysis": {
                "analyzer" : {
                    "slug_analyzer" : {
                        "tokenizer": "slug_tokenizer",
                        "filter" : ["lowercase"]
                    }
                },
                "tokenizer" :{
                    "slug_tokenizer" : {
                        "type": "pattern",
                        "pattern": "-"
                    }
                }
            }
        }
    },
    "mappings" :{
        "doc" : {
            "properties" : {
                "slug" : {"type": "string", "analyzer" : "slug_analyzer"}
            }
        }
    }
}'
于 2012-11-16T03:32:52.970 回答