我正在使用ElasticSearch索引文档.
我的映射是:
"mongodocid": {
"boost": 1.0,
"store": "yes",
"type": "string"
},
"fulltext": {
"boost": 1.0,
"index": "analyzed",
"store": "yes",
"type": "string",
"term_vector": "with_positions_offsets"
}
Run Code Online (Sandbox Code Playgroud)
要突出显示完整的全文,我将其设置number_of_framgments为0.
如果我执行以下类似Lucene的字符串查询:
{
"highlight": {
"pre_tags": "<b>",
"fields": {
"fulltext": {
"number_of_fragments": 0
}
},
"post_tags": "</b>"
},
"query": {
"query_string": {
"query": "fulltext:test"
}
},
"size": 100
}
Run Code Online (Sandbox Code Playgroud)
对于结果集中的某些文档,突出显示的全文的长度小于全文本身.由于我设置number_of_fragments为0和pre_tags/ post_tags被添加,这不应该发生.
现在出现了奇怪的行为:如果我只通过这样做来搜索其中一个失败的元素:
{
"highlight": {
"pre_tags": "<b>",
"fields": {
"fulltext": {
"number_of_fragments": 0
}
},
"post_tags": "</b>"
},
"query": …Run Code Online (Sandbox Code Playgroud) 我正在努力让ElasticSearch工作,特别是使用River Plugin.出于某种原因,我无法让它发挥作用.我已经包含了我正在尝试使用的程序,在此处找到:
curl -XDELETE 'http://localhost:9200/_all/'
Run Code Online (Sandbox Code Playgroud)
响应:
{
"ok": true,
"acknowledged": true
}
Run Code Online (Sandbox Code Playgroud)
这是我知道我正在使用一组空的elasticsearch实例.
我有一个名为test的现有数据库,并且已经安装了河流插件.无论如何都要测试确认River Plugin已安装并正在运行?
我发出以下命令:
curl -XPUT 'http://localhost:9200/_river/my_index/_meta' -d '{
"type" : "couchdb",
"couchdb" : {
"host" : "localhost",
"port" : 5984,
"db" : "my_couch_db",
"filter" : null
}
}'
Run Code Online (Sandbox Code Playgroud)
my_couch_db是一个真正的数据库,我在Futon中看到它.里面有一份文件.
响应:
{
"ok": true,
"_index": "_river",
"_type": "my_index",
"_id": "_meta",
"_version": 1
}
Run Code Online (Sandbox Code Playgroud)
现在在这一点上,我的理解是弹性应该像我在教程中看到的那样工作.
我试着查询,只是为了找到任何东西.我去
http://localhost:9200/my_couch_db/my_couch_db.
Run Code Online (Sandbox Code Playgroud)
响应:
No handler found for uri [/my_couch_db/my_couch_db] and method [GET]
Run Code Online (Sandbox Code Playgroud)
我去的时候有点奇怪
localhost:5984/my_couch_db/__changes
Run Code Online (Sandbox Code Playgroud)
我明白了
{
"error": "not_found",
"reason": "missing"
}
Run Code Online (Sandbox Code Playgroud)
任何人都知道我搞砸了哪一部分?
在弹性搜索中,这个过滤器
{
"bool": {
"must": {
"term": {
"article.title": "google"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
正确退回标题中带有"google"的文章.
然而,
{
"bool": {
"must": {
"term": {
"article.title": "google earth"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
尽管在标题中有一些带有"google earth"字样的文章,但不会返回任何结果.我希望它能这样做.
完整查询:
{
"size": 200,
"filter": {
"bool": {
"must": {
"term": {
"article.title": "google maps"
}
}
}
},
{
"range": {
"created_date": {
"from": "2013-01-11T02:14:03.352Z"
}
}
}]
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,我没有"查询" - 只是一个过滤器,大小和范围.所以我认为ElasticSearch正在使用默认的分析器......?
我有什么误会?
编辑:对于那些寻找解决方案的人,这是我的过滤器:
{
"query": {
"bool": {
"must": {
"must_match": {
"article.title": "google …Run Code Online (Sandbox Code Playgroud) 我试图导入Logstash的日志文件包含一个有时看起来像日期/时间的字段,有时却没有.不幸的是,第一次出现看起来像日期/时间,某人(logstash或elasticsearch)决定将该字段定义为日期/时间.尝试导入以后的日志记录时,Elasticsearch有一个例外:
Failed to execute [index ...]
org.elasticsearch.index.mapper.MapperParsingException: Failed to parse [@fields.field99]
at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:320)
at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:587)
...
Caused by: java.lang.IllegalArgumentException: Invalid format: "empty"
at org.elasticsearch.common.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:747)
...
Run Code Online (Sandbox Code Playgroud)
问题:如何告诉logstash/elasticsearch不将此字段定义为日期/时间?我希望我的日志中的所有字段(除了一个显式时间戳字段)都被定义为文本.
问题:似乎logstash在看到弹性搜索引发异常的日志之后放弃尝试从日志文件中导入记录.如何告诉logstash忽略此异常并继续尝试从日志文件中导入其他记录?
ElasticSearch基于查询的所有命中来独立于from和size参数构建聚合结果.这是我们在大多数情况下想要的,但我有一个特殊情况,我需要将聚合限制在前N个命中.限制过滤器不适合,因为它不能获取最佳N项,而只能获取与查询匹配的第一个X(每个分片),而与其分数无关.
有没有办法构建一个命中数具有上限N的查询,以便能够构建限制在那些前N个结果中的聚合?如果是这样怎么样?
附属问题:限制匹配文件的分数可能是另一种选择,即使在我的情况下我需要一个固定的界限.min_score参数是否会影响聚合?
我正在汇总每个都有时间戳的文档.时间戳是UTC,但每个文档也有一个本地时区("timezone": "America/Los_Angeles"),可以在文档之间有所不同.
我正在尝试date_histogram aggregation基于当地时间而不是UTC或固定时区(例如,使用该选项"time_zone": "America/Los_Angeles").
如何在聚合之前将每个文档的时区转换为当地时间?
这是简单的聚合:
{
"aggs": {
"date": {
"date_histogram": {
"field": "created_timestamp",
"interval": "day"
}
}
}
}
Run Code Online (Sandbox Code Playgroud) timezone elasticsearch date-histogram elasticsearch-aggregation
关于TypeScript,我遇到了一个非常奇怪的错误,告诉我字符串文字不匹配.(TypeScript v1.8)
import { Component } from "react";
import {
StyleSheet,
Text,
View
} from "react-native";
const styles = StyleSheet.create({
container: {
flex: 1,
justifyContent: "center",
alignItems: "center",
backgroundColor: "#F5FCFF",
},
welcome: {
fontSize: 20,
textAlign: "center",
margin: 10,
}
});
export class App extends Component<any, any> {
render() {
return (
<View style={styles.container}>
<Text style={styles.welcome}>
Welcome to React Native!
</Text>
</View>
);
}
}
Run Code Online (Sandbox Code Playgroud)
错误:
src\client\index.ios.tsx(19,15): error TS2322: Type '{ fontSize: number; textAlign: string; margin: number; }' is not …Run Code Online (Sandbox Code Playgroud) 我的低源硬件配置机器上有 1 个节点、1 个分片、1 个副本架构。我必须将 Elasticsearch 堆大小保持在总内存的 20%,并且我将1k~1m文档索引到 Elasticsearch,以了解硬件配置。我有不同类型的机器,从2GB 到 16GB,但由于它们是32 位架构,我只能使用300m到1.5GB 的最大内存作为堆大小。
由于某些原因,我不知道为什么,Elasticsearch 使用未分配的分片创建了一些索引,并使集群健康状况变为红色。我尝试在不创建新节点的情况下恢复和分配分片并将数据传输到其中,因为我不应该这样做。我还尝试使用此配置使用此命令重新路由索引:
curl -XPUT 'localhost:9200/_settings' -d '{
"index.routing.allocation.disable_allocation": false
}'
Run Code Online (Sandbox Code Playgroud)
这是我的节点信息:
{
name: mynode
transport_address: inet[/192.168.1.4:9300]
host: myhost
ip: 127.0.0.1
version: 1.0.0
build: a46900e
http_address: inet[/192.168.1.4:9200]
thrift_address: /192.168.1.4:9500
attributes: {
master: true
}
settings: {
threadpool: {
search: {
type: fixed
size: 600
queue_size: 10000
}
bulk: {
type: fixed
queue_size: 10000
size: 600
}
index: { …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有shingle过滤synonym器的过滤器(请参见下面的代码)。这给了我输出:
强制执行
为实现
进行检查
考试测试
词语enforced和implemented正在发生的一起相同testing和examination。是否有可能得到以下输出?
强制执行
为实现
进行检查
供测试用
JSON定义
String json = jsonBuilder()
.startObject()
.field("number_of_shards", 1)
.startObject("analysis")
.startObject("filter")
.startObject("my_shingle_filter")
.field("type","shingle")
.field("min_shingle_size",2)
.field("max_shingle_size",2)
.field("output_unigrams",false)
.endObject()
.startObject("my_syn_filter")
.field("type", "synonym")
.field("format","wordnet")
.field("synonyms_path","prolog/wn_s.pl")
.endObject()
.endObject()
.startObject("analyzer")
.startObject("my_shingle_analyzer")
.field("type", "custom")
.field("tokenizer","standard")
.field("filter",new String[]{"lowercase","my_syn_filter","my_shingle_filter"})
.endObject()
.endObject()
.endObject()
.endObject().string();
client.admin().indices().prepareCreate("testshingle").setSettings(ImmutableSettings.settingsBuilder()
.loadFromSource(json))
.execute().actionGet();
AnalyzeResponse resp= client.admin().indices().prepareAnalyze("testshingle", "implemented for testing").setAnalyzer("my_shingle_analyzer").execute().get();
for(AnalyzeToken token:resp.getTokens()){
System.out.println(token.getTerm());
}
Run Code Online (Sandbox Code Playgroud) 查询索引时,如何获取匹配标记列表,而不是整个字符串.说,我们必须查询包含值列表的字段,如 -
'Sunsilk shampoo conditioner'
'Dove Soap'
'Bread Bun Biscuit'
'Sunscreen cream'
Run Code Online (Sandbox Code Playgroud)
当我查询时s,它应该只返回 -
'Sunsilk'
'shampoo'
'Soap'
'Sunscreen'
Run Code Online (Sandbox Code Playgroud)