我想从elasticsearch
到java 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();
字段映射是字段(“索引”,“已分析”)。我试过这个但没有结果。
在此先感谢
答案 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