Java Elasticsearch:查找包含表情符号的字段值:)

时间:2015-03-18 11:56:28

标签: java elasticsearch

我想从elasticsearchjava api检索所有那些由微笑组成的文件 例如
1)这一行包含笑脸:)
2)此行不包含笑脸
3)这一行:)包含笑脸
我希望elasticsearch返回第1行和第3行,因为它包含:)
我试过这个

SearchResponse response = client.prepareSearch(indexName)
            .setTypes(type)
            .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
            .setQuery(QueryBuilders.regexpQuery(fieldName, ".\*:).\*"))
            .setFrom(0).setSize(100).setExplain(true)
            .execute()
            .actionGet();

字段映射是字段(“索引”,“已分析”)。我试过这个但没有结果。

在此先感谢

2 个答案:

答案 0 :(得分:0)

你是否尝试使用\)从笑脸逃脱?)?通常,这些系统非常容易受到特殊字符的攻击。<​​/ p>

答案 1 :(得分:0)

对我有用的解决方案。

    client.admin().indices().prepareCreate("index_name")
        .setSettings(ImmutableSettings.settingsBuilder().loadFromSource(jsonBuilder()
            .startObject()
                .startObject("analysis")
                    .startObject("filter")
                        .startObject("tweet_filter")
                            .field("type", "word_delimiter")

                            .field("type_table", new String[]{"( => ALPHANUM", ") => ALPHANUM","? => ALPHANUM",": => ALPHANUM"})
                        .endObject()
                    .endObject()
                    .startObject("analyzer")
                        .startObject("tweet_analyzer")
                            .field("type", "custom")
                            .field("tokenizer", "whitespace")
                            .field("filter", new String[]{"lowercase", "tweet_filter"})
                        .endObject()
                    .endObject()
                .endObject()
            .endObject().string()))
        .execute().actionGet();

XContentBuilder builder = XContentFactory.jsonBuilder()
                    .startObject()
                    .startObject("index_type")
                    .startObject("properties")
                    .startObject("text")
                    .field("type", "string")
                    .field("index", "analyzed")
                    .field("index_analyzer" ,  "standard")
                    .field("search_analyzer" ,  "standard")
                    .field("analyzer" , "tweet_analyzer")
                    .endObject()
                    // moremapping
                    .endObject()
                    .endObject()
                    .endObject();
            client.admin().indices().preparePutMapping("index_name")
                    .setType("index_type").setSource(builder).execute().actionGet();  

我们可以像这样搜索这些笑容。

SearchResponse response = client.prepareSearch(indexName)
        .setTypes(type)
        .setSearchType(SearchType.DFS_QUERY_THEN_FETCH)
        .setQuery(QueryBuilders.regexpQuery("text", ".*\\:\\(.*"))
        .setFrom(0).setSize(100).setExplain(true)
        .execute()
        .actionGet();

其完整描述见以下链接。 link