elasticsearch,Java,elasticsearch" /> elasticsearch,Java,elasticsearch" />

Java Elasticsearch:查找包含微笑的字段值:)

Java Elasticsearch:查找包含微笑的字段值:),java,elasticsearch,Java,elasticsearch,我想从elasticsearch通过javaapi检索所有这些文档,这些文档由smiles组成。 例如 1) 这行包含笑脸:) 2) 此行不包含笑脸 3) 这一行:)包含笑脸 我希望elasticsearch返回第1行和第3行,因为它包含:) 我试过这个 SearchResponse response = client.prepareSearch(indexName) .setTypes(type) .setSearchType(SearchTyp

我想从
elasticsearch
通过
javaapi
检索所有这些文档,这些文档由smiles组成。
例如
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();
字段映射是字段(“索引”、“分析”)。我试过了,但没有结果。


提前感谢

您是否尝试过使用\)从笑脸中逃脱?。通常,这些系统很容易受到特殊字符的攻击。

对我有效的解决方案

    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();
下面的链接给出了它的完整描述。

请发布您的结果/try/code,以便从SO社区获得更好的帮助,然后回复。我已经发布了尝试过的代码。现在,它需要像代码一样格式化,并且可读性更好。您可以通过使用
{}按钮
将代码插入
此处输入您的代码
是的,我尝试过像\:\),\:\ \)这样的转义,但是没有Lucki如果您输入像“contains”这样的常规单词,系统将返回任何结果?在示例1和3My中,方法是检测不匹配的原因。你能用另一个角色来替换吗?然后:?是的,我认为问题在于)它匹配:““当我删除时”)“当我只使用时它抛出异常”)“你能在评论中发布异常吗?