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中,方法是检测不匹配的原因。你能用另一个角色来替换吗?然后:?是的,我认为问题在于)它匹配:““当我删除时”)“当我只使用时它抛出异常”)“你能在评论中发布异常吗?