3

例如,我现在正在这样搜索:

http://localhost:9200/posts/post/_search?q=content:%23sachin

但是,我得到的所有结果都是“sachin”而不是“#sachin”。另外,我正在编写一个正则表达式来获取项数。刻面如下所示:

"facets": {
  "content": {
      "terms": {
        "field": "content",
        "size": 1000,
        "all_terms": false,
        "regex": "#sachin",
        "regex_flags": [
          "DOTALL",
          "CASE_INSENSITIVE"
        ]
      }
    }
}

这不返回任何值。我认为这与在正则表达式中转义“#”有关,但我不知道该怎么做。我试图逃避它\\\但它没有用。任何人都可以在这方面帮助我吗?

4

2 回答 2

6

本文提供了有关如何使用自定义分析器保存 # 和 @ 的信息: https ://web.archive.org/web/20160304014858/http://www.fullscale.co/blog/2013/03/04/preserving_specific_characters_during_tokenizing_in_elasticsearch.html

curl -XPUT 'http://localhost:9200/twitter' -d '{
    "settings" : {
        "index" : {
            "number_of_shards" : 1,
            "number_of_replicas" : 1
        },  
        "analysis" : {
            "filter" : {
                "tweet_filter" : {
                    "type" : "word_delimiter",
                    "type_table": ["# => ALPHA", "@ => ALPHA"]
                }   
            },
            "analyzer" : {
                "tweet_analyzer" : {
                    "type" : "custom",
                    "tokenizer" : "whitespace",
                    "filter" : ["lowercase", "tweet_filter"]
                }
            }
        }
    },
    "mappings" : {
        "tweet" : {
            "properties" : {
                "msg" : {
                    "type" : "string",
                    "analyzer" : "tweet_analyzer"
                }
            }
        }
    }
}'

这不是处理方面,但在分析器中重新定义这些特殊字符的类型可能会有所帮助。

于 2013-07-12T14:12:59.763 回答
0

另一种值得考虑的方法是索引一个特殊的(例如“保留”)词而不是哈希符号。例如:哈希符号字符。确保您也将替换查询中的“#”字符。

于 2018-04-06T06:05:09.807 回答