Home php c# sql c c++ javascript python java go android git linux asp.net django .net node.js ios xcode cocoa iphone mysql tomcat mongodb bash objective-c scala visual-studio apache elasticsearch jar eclipse jquery ruby-on-rails ruby rubygems android-studio spring lua sqlite emacs ubuntu perl docker swift amazon-web-services svn html ajax xml java-ee maven intellij-idea rvm macos unix css ipad postgresql css3 json windows-server vue.js typescript oracle hibernate internet-explorer github tensorflow laravel symfony redis html5 google-app-engine nginx firefox sqlalchemy lucene erlang flask vim solr webview facebook zend-framework virtualenv nosql ide twitter safari flutter bundle phonegap centos Register | Login | Edit Tags | New Questions | 繁体 | 简体


10 questions online user: 33

0
votes
answers
5 views
+10

Elasticsearch動態模板匹配幾個確切的字段

0

我目前正在努力簡化Elasticsearch的映射模板文件。事實上,我有幾個Object字段具有相同的結構(例如源和目標)Elasticsearch動態模板匹配幾個確切的字段

有沒有辦法設置動態模板,以便它可以匹配多個模式?

這是我執行:

POST /_template/mapping-lol 
{ 
    "template": "*-newevents-*", 
    "mappings": { 
    "log": { 
     "dynamic_templates": [ 
     { 
      "system": { 
      "match_pattern": "regex", 
      "match": "^(source|destination)$", 
      "mapping": { 
       "properties": { 
       "name": { 
        "dynamic": false, 
        "type": "object", 
        "properties": { 
        "first": { 
         "type": "text" 
        }, 
        "last": { 
         "type": "text" 
        } 
        } 
       }, 
       "ip": { 
        "type": "ip" 
       } 
       } 
      } 
      } 
     } 
     ], 
     "properties": { 
     "source": { 
      "type": "object", 
      "dynamic": true 
     }, 
     "destination": { 
      "type": "object", 
      "dynamic": true 
     } 
     } 
    } 
    } 
} 

POST /tenant-newevents-1/log 
{ 
    "source": { 
    "name": { 
     "first": "John", 
     "last": "Doe" 
    }, 
    "ip": "1.2.3.4" 
    }, 
    "destination": { 
    "name": { 
     "first": "Jane", 
     "last": "Doe" 
    }, 
    "ip": "3.4.5.6" 
    } 
} 

GET /tenant-newevents-1 

這上面沒有工作...

我有的是這些相同的方案來匹配(?20)。

非常感謝您的幫助!

+0

看起來不錯。剛剛嘗試過ES 5和6,並且運行良好。請說明你如何創建索引/映射? – Val

+0

curl -XPOST「locallhost:9200/_template/mapping-events」[email protected] – moutonjr

+0

好的一個!那麼mymapping.json的內容呢? – Val

沙发
0
0

OK我發現出了什麼問題:字段不能映射在所有動態映射繼續。在映射工作中刪除「源」和「目標」方案。

POST /_template/mapping-lol 
{ 
    "template": "*-newevents-*", 
    "mappings": { 
    "log": { 
     "dynamic_templates": [ 
     { 
      "system": { 
      "match_pattern": "regex", 
      "match": "^(source|destination)$", 
      "mapping": { 
       "properties": { 
       "name": { 
        "dynamic": false, 
        "type": "object", 
        "properties": { 
        "first": { 
         "type": "text" 
        }, 
        "last": { 
         "type": "text" 
        } 
        } 
       }, 
       "ip": { 
        "type": "ip" 
       } 
       } 
      } 
      } 
     } 
     ], 
     "properties": {} 
    } 
    } 
} 
+0

這是我的下一個評論;-)如果你有他們的動態模板映射他們沒有意義。 – Val

0
votes
answers
4 views
+10

Logstash和彈性升級

1

我在5.1版上有一個功能性Logstash和Elasticsearch。Logstash和彈性升級

我刪除了所有索引,然後升級到6.1。

現在,當Logstash接收來自Filebeat(這劇照5.1版)的一些事件,它拋出這個錯誤:

[2017-12-27T17:29:16,463][WARN ][logstash.outputs.elasticsearch] Could not index event to Elasticsearch. 
{ 
    :status => 400, 
    :action => ["index", {:_id=>nil, :_index=>"logstash-2017.12.27", :_type=>"doc", :_routing=>nil}, #<LogStash::Event:0x34de85bd>], 
    :response => { 
    "index" => { 
     "_index" => "logstash-2017.12.27", 
     "_type" => "doc", 
     "_id" => nil, 
     "status" => 400, 
     "error" => { 
     "type" => "mapper_parsing_exception", 
     "reason" => "Failed to parse mapping [_default_]: [include_in_all] is not allowed for indices created on or after version 6.0.0 as [_all] is deprecated. As a replacement, you can use an [copy_to] on mapping fields to create your own catch all field.", 
     "caused_by" => { 
      "type" => "mapper_parsing_exception", 
      "reason" => "[include_in_all] is not allowed for indices created on or after version 6.0.0 as [_all] is deprecated. As a replacement, you can use an [copy_to] on mapping fields to create your own catch all field." 
     } 
     } 
    } 
    } 
} 

使用非常簡單的管道我甚至試過了,你可以在這裏看到:

input { 
    beats { 
    port => 5044 
    } 
} 

filter { 
    json { 
     source => "message" 
    } 
} 

output { 
    elasticsearch { hosts => ["localhost:9200"] } 
} 

但它一遍又一遍地拋出這個錯誤。

任何想法在這裏可能是錯的?

沙发
0
1

看看changes in mapping, introduced in elasticsearch 6.0

你需要從你的索引模板中刪除include_in_all映射參數。

你可以在這裏粘貼你的模板/映射嗎?

+0

非常感謝這個洞察力,現在它工作的很好。 我通過刪除這些字段或簡單地刪除模板並讓新日誌隱藏再次創建它來工作。 一般而言,它再次證明我讀取主要版本的更改日誌非常值得。 – Navarro

+0

@Navarro - 你如何刪除模板? – Wjdavis5

板凳
0
0

這個答案只是擴展@alexanderlz說的。從kibana的DevTools頁我跑了這一點:

GET /_template/ 

,列出了所有的模板

這裏我們需要刪除/修改(部分)的模板:

"logstash": { 
    "order": 0, 
    "version": 60001, 
    "index_patterns": [ 
     "logstash-*" 
    ], 

因此然後運行

DELETE /_template/logstash 

一旦完成,重新啓動logstash,它將重新安裝一個新的正確的模板。

0
votes
answers
4 views
+10

使用CTX查詢Elasticsearch更新

1

我想更新索引內的所有文檔。我發現Update Query是我們應該使用的方法。但是,當我將ctx._now用作更新文檔字段的值時,我遇到了問題,導致字段值爲空。使用CTX查詢Elasticsearch更新

這是樣板:

{ 
 
    "script": { 
 
    "inline": "ctx._source.timenow = ctx._now" 
 
    }, 
 
    "query": { 
 
    "match_all": {} 
 
    } 
 
}

timenow evidence

當我使用的隨機數值,它是工作。假設我將timenow = 5。然後,所有文檔字段timenow變爲5.但是,使用此ctx方法不起作用。

我該怎麼做?

其他信息

這是我的ES信息:

"version" : { 
 
    "number" : "5.5.1", 
 
    "build_hash" : "19c13d0", 
 
    "build_date" : "2017-07-18T20:44:24.823Z", 
 
    "build_snapshot" : false, 
 
    "lucene_version" : "6.6.0" 
 
    }

我使用ctx._now,因爲它是在文件更新工作。下面是的情況下:

{ 
 
    "script": "ctx._source.timenow2 = ctx._now" 
 
}

實施例:POST索引/類型/ 24/_Update

這裏是由彈性文檔:

除了_Source,以下變量可通過ctx映射獲得:_index,_type,_id,_version,_routing和_now(當前時間戳)。

https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-update.html

謝謝

+0

你在哪裏看到'ctx._now'?你使用什麼版本的ES? – Val

+0

如果所有的timenows都更新爲null,這意味着'_now'不是'ctx'上的字段。是什麼讓你使用'_now'(你在哪裏找到關於它的信息)?嘗試設置'timenow'值爲'Instant.now()'或類似的東西,看看它是如何工作的。 – ryanlutgen

+0

我有更新我的問題添加ctx._now。我如何使用Instant.now()? –

沙发
0
1

_now只是更新API,即在打電話時,請在_update端點,不_update_by_query

使用這個代替:

{ 
    "script": { 
    "inline": "ctx._source.timenow = Instant.now().toEpochMilli()" 
    }, 
    "query": { 
    "match_all": {} 
    } 
} 
+0

謝謝,這是更快的Instant.now或新的日期().getTime()?我在其他網站上發現了新的Date()。getTime()。 –

+0

最快的是'System.currentTimeMillis()'這是'Instant.now()'在 – Val

+0

下使用的內容嗨,我已經嘗試過了,它效果很好。非常感謝你 –

0
votes
answers
4 views
+10

「where .. in」模擬elasticsearch與Java API

0

我是ElasticSearch的新手。 我在我的User類中有一個字符串字段,代表UserStatus,我需要搜索處於特定狀態的所有用戶。 在關係數據庫中,它完全是「where .. in」。「where .. in」模擬elasticsearch與Java API

我看到的例子,使用termsQuery在不同的組合,但我沒有設法使他們工作(查詢返回什麼都沒有)。

所以,問題是:有沒有鏈接,顯示整個例子或某人面臨這樣的問題? 任何幫助都很高興!

//實體本身

@AllArgsConstructor 
    @NoArgsConstructor 
    @Data 
    @Builder 
    @Document(indexName = "users", type = "user") 
    public class User { 

     @Id 
     private String id; 

     private String userStatus; 
     private String firstName; 
     private String lastName; 
     private Date dateCreated; 
    } 

//一個彈簧服務方法

@Override 
public List<User> findByParams(UserSearchRequest userSearchRequest) { 

    TermsQueryBuilder termsQueryBuilder = QueryBuilders 
      .termsQuery("userStatus", userSearchRequest.getUserStatuses()); 


    SearchQuery searchQuery = new NativeSearchQueryBuilder() 
      .withQuery(boolQuery().must(termsQueryBuilder)) 
      .withPageable(new PageRequest(0, 100)) 
      .build(); 


    return Lists.newArrayList(userRepository.search(searchQuery)); 

} 

// REST請求對象

@AllArgsConstructor 
@NoArgsConstructor 
@Data 
public class UserSearchRequest { 
    private List<String> userStatuses; 
} 
+1

你嘗試運行直接查詢到elasticsearch(捲曲或某種基於Web的用戶界面),而不是通過Java ?通常這就是幫助我 – sfat

+0

我同意@sfat,嘗試與直接彈性搜索查詢。以下是基於特定條件檢索值的查詢。 – Sree

+0

下面是一個查詢{「query」:{「constant_score」:{「filter」:{「bool」:{「should」:[{「term」:{「employee」:「foo」}}]}} }}}。方法 - >發佈,網址 - > http:// localhost:9200///_search。 – Sree

沙发
0
0

檢查Elasticsearch的文檔"Finding Multiple Exact Values"

基本上,您需要將自己的術語搜索到一個常數分數查詢中。

從Elasticsearch DOC(保留給後人)

GET /my_store/products/_search 
{ 
    "query" : { 
     "constant_score" : { 
      "filter" : { 
       "terms" : { 
        "price" : [20, 30] 
       } 
      } 
     } 
    } 
} 

這個例子說,搜索的有價產品20或30

你需要的是搜索所有具有用戶userStatus您作爲List傳遞的任一值。

在你需要改變你的NativeSearchQueryBuilder在這樣的實施方面:

SearchQuery searchQuery = new NativeSearchQueryBuilder() 
       .withQuery(constantScoreQuery(termsQueryBuilder)) 
       .withPageable(new PageRequest(0, 100)) 
       .build(); 
0
votes
answers
4 views
+10

elasticsearch vs solr - 用於自定義全文搜索系統

0

我有一個基於Lucene索引的內部創建的搜索引擎的Web應用程序。elasticsearch vs solr - 用於自定義全文搜索系統

該應用程序允許全文搜索。

該應用程序使用jsp和java構建。

爲用戶索引Hadoop分佈式處理軟件。

Apache lucene項目是根據我們的具體情況定製的。主要是全文搜索的部分,添加訂購結果的新功能。

前端使用hadoop-rpc與後端進行通信,後者又創建了一個內部解決方案(10年前),用於研究Lucene的未知事件。

該代碼是遺留的,它需要遷移到另一種類型的軟件。這裏的問題:ElasticSearchSolr

的要求是:

  • 開源的,目的是爲了自定義接受特定功能的應用程序的排名 。
  • 使用Lucene索引(因爲你 不想重新索引)。
  • 速度是非常重要的因素。

我已閱讀了一些關於這個主題的文章,但我想爲我的個案提供個性化的意見,任何想法哪一個將是最好的選擇?

謝謝

+0

兩者都可以很好地工作。哪種方法最好,取決於超出可以在這裏描述的因素以及您的詳細信息要求,但通常這對兩個平臺都是「足夠好」。無論如何,他們都是Lucene。 – MatsLindh

+0

請參考此問題:https://stackoverflow.com/questions/10213009/solr-vs-elasticsearch?rq=1 – Val

沙发
0
0

SolR和Elasticsearch非常相似。他們都有你需要的功能。

這是一個非常開放的問題,我的觀點是Elasticsearch將是一個更好的選擇,它有一個更大的社區,並且往往會增長得更快。

enter image description here

板凳
0
0

定製更多您需要的解決方案是,你就越有可能會從Solr的受益。

雖然他們都使用Lucene的封面,但Solr直接暴露了更多。 Elasticsearch針對日誌和事物進行了更多調整,一些文本搜索配置更難以訪問。

+0

好吧,我明白了。哪一個有最好的技術支持?最好的代碼可以定製?從我看到的都有一個很好的在線社區,但哪一個更適合定製搜索引擎? – lucy

+0

Solr具有更好的定製性,因爲絕對一切都是開源的。彈性可能有更好的支付。免費支持,我不知道。 –

0
votes
answers
3 views
+10

ElasticSearch 1.1.2無法正常啓動

0

我正在爲我的公司升級ElasticSearch。爲了開始這個,我需要運行我的機器上運行OSX Sierra(10.12.6)的舊版本(1.1.2)。我從我公司的存儲庫下載了[email protected],但沒有正確啓動。我得到這個:ElasticSearch 1.1.2無法正常啓動

$ brew services list 
Name    Status User  Plist 
[email protected] started pjscopeland /Users/pjscopeland/Library/LaunchAgents/[email protected] 

...但自制的地位「started」是黃色的,在這裏他們的休息是綠色的,如果我手動運行它,我得到這個:

$ elasticsearch 
Java HotSpot(TM) 64-Bit Server VM warning: Option UseParNewGC was deprecated in version 9.0 and will likely be removed in a future release. 
Java HotSpot(TM) 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release. 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at org.elasticsearch.bootstrap.Bootstrap.main(Bootstrap.java:190) 
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:32) 
Caused by: java.lang.UnsupportedOperationException: Boot class path mechanism is not supported 
    at java.management/sun.management.RuntimeImpl.getBootClassPath(RuntimeImpl.java:99) 
    at org.elasticsearch.monitor.jvm.JvmInfo.<clinit>(JvmInfo.java:77) 
    ... 2 more 

NB。請記住,我的Java技能處於我可能只能讀取它的級別,但可能無法解決任何可能需要更改的內容。

+0

黃色是好的。在ES 2.4黃色意味着你只有1個數據節點。你有沒有嘗試連接到服務器?順便說一句:如果您在生產計算機上安裝副本時遇到問題(爲HTTP和二進制協議提供不同的端口) – bato3

+1

這不是ElasticSearch黃色,這是自制黃色。該服務尚未正常啓動。我在我的文章中澄清了這一點。 – PJSCopeland

沙发
0
5

看起來你有Java的9安裝:

的HotSpot的Java(TM)64位服務器VM警告:選項UseParNewGC被棄用9.0版本,並可能會在未來的版本中刪除。

雖然ElasticSearch不支持它。

根據this matrix,從2.3到5.6的任何ES版本都不支持Java 9; ES 1.x沒有被列出,因爲它不再被支持。

還有一個issue與logstash(ElasticSearch的一個組件)有相似的堆棧跟蹤。

,您張貼

由導致異常:java.lang.UnsupportedOperationException:引導類路徑機制不支持

表明,有一些錯誤的JVM。類別RuntimeImpl發生異常。

我建議你檢查你的生產機器上安裝了哪個版本的Java並安裝在你的機器上。有關如何在Mac上管理不同版本Java的提示,您可以在此查看SO question

希望有幫助!

+0

完美!有些兔子洞會讓所有的東西都安裝正確 - JEnv對於那些更習慣於RVM的人來說不太直觀 - 但是在所有鏈接之後,我設法達到了目標。謝謝! – PJSCopeland

+1

棘手的部分是告訴_service_使用Java 8而不是9.我完全放棄並卸載了Java 9,並且服務完美啓動。 – PJSCopeland

+0

@PJSCopeland很高興你管理! –

0
votes
answers
3 views
+10

Elasticsearch Java API查詢JSON解析器

1

所以我有一個elasticsearch數據庫,我用它來存儲聯繫人。我做下面的查詢。Elasticsearch Java API查詢JSON解析器

public String getAllContacts() throws IOException { 

    SearchResponse response = client.prepareSearch("contact").get(); 

    return response.toString(); 
} 

於是我得到這樣 Json result from query

一個結果,那麼我想提出的JSON數據到我的聯繫對象類

import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 
import javax.xml.bind.annotation.XmlRootElement; 
import java.util.Date; 
@JsonIgnoreProperties(ignoreUnknown = true) 
@XmlRootElement 
public class Contact { 

    private long id; 
    private String name; 
    private Date date; 

    public Contact() {} 
    public Contact(long id, String name, Date date) { 
     this.id = id; 
     this.name = name; 
     this.date = date; 
    } 
    public long getId() {return id;} 
    public void setId(long id) {this.id = id;} 
    public String getName() { return name;} 
    public void setName(String name) {this.name = name;} 
    public Date getDate() { return date; } 
    public void setDate(Date date) { this.date = date; } 
} 

後來我但是,當我嘗試映射JSON反對使用下面的代碼我得到的錯誤

ObjectMapper mapper = new ObjectMapper(); 
    List<Contact> myObjects = mapper 
.readValue(response.toString(), mapper 
.getTypeFactory() 
.constructCollectionType(List.class, Contact.class)); 

其中之一許多錯誤

Can not deserialize instance of java.util.ArrayList out of START_OBJECT token 

,所以我認爲這個問題是所有這些來自查詢,如果我得到一個乾淨的JSON這樣{"id":"2","name";"dinu"}它的工作原理其他的東西(我沒有手動測試),但它與許多其他的東西,例如作爲JSON文件(標題元數據)的頂部(檢查上面的JSON結果圖像)。

所以我覺得我有2個選擇: -

選項1: - 得到elasticsearch DB乾淨的結果,所以我需要修改的搜索查詢。我不知道彈性搜索是否可以實現。如果是的話,有人可以提出如何修改查詢的建議(在Java API中)。

選項2: - 篩選出JSON文件並刪除所有不需要的東西,然後將其變爲Contact對象。我試圖GSON和傑克遜都與未經過濾的文件失敗。如果有任何先進或自定義的方式來過濾讓我知道。

選項3: - 我完全錯了,有一個更好的簡單的方法來做它。請讓我知道。

UPDATE 看這個: - https://www.youtube.com/watch?v=YgKcVBbvy2U

,所以我試圖用GSON將序列

則異常不來,但系列化的「意外‘d’」後,我得到響應上述方式也在原始的甲酸鹽中,它每次輸出這個[email protected]我發送一個GET響應@符號更改後的文本。

沙发
0
3

設定值到相應的對象的方法您需要對搜索匹配和反序列化值執行迭代。

SearchResponse response = client.prepareSearch("contact").get(); 
ObjectMapper mapper = new ObjectMapper(); 
List<Contact> lst = new ArrayList<Contact>(); 
for(SearchHit hit : response.getHits().getHits()) { 
    Contact c = mapper.readValue(hit.getSourceAsString(), Contact.class); 
    lst.add(c); 
} 

如果您需要再次s erialize它作爲一個JSON列表,你可以簡單地得到作爲JSON

String lstString = mapper.writeValueAsString(lst); 

上面提到的ObjectMapper距離Jackson數據綁定庫。這是非常好的,比Gson

import com.fasterxml.jackson.databind.ObjectMapper; 
板凳
0
0

從響應JSON中,hits:標籤應該是包含屬性index,type,id,score,source..etc的列表。請嘗試檢索包含具有聯繫人的對象的匹配列表對象

+0

我想要做的是刪除命中列表對象,只獲取JSON格式的聯繫人數據。 – Dinushka

地板
0
0

不確定這是否有助於獲得您要查找的內容。我只是將你的字符串添加到文本文件中

Object obj = new JSONParser()。parse(new FileReader(「data。TXT 「));

// typecasting obj to JSONObject 
    JSONObject jo = (JSONObject) obj; 

    // getting hits 
    Map hits = ((Map)jo.get("hits")); 
    JSONArray array = null; 
    // iterating hits Map 
    Iterator<Map.Entry> itr1 = hits.entrySet().iterator(); 
    while (itr1.hasNext()) { 
     Map.Entry pair = itr1.next(); 
     System.out.println(pair.getKey() + " : " + pair.getValue()); 
     if(pair.getKey().equals("hits")){ 
      array = (JSONArray) pair.getValue(); 

     } 
    } 

    System.out.println(array); 

[{」 _index 「:」 接觸 「 」_類型「: 」ID「, 」_ ID「:2 」_分數「:1},{ 」_索引「:」 接觸」, 「_類型」: 「ID」, 「_ ID」:4, 「_分數」:1}]

你或許可以寫可以通過迭代JSON陣列

0
votes
answers
3 views
+10

的Python - elasticsearch.exceptions.RequestError

0

我想在elasticsearch的Python - elasticsearch.exceptions.RequestError

提取數據和我的功能是這樣的:

##Using regex to get the image name. 
#it is inefficient to fetch them one by one using doc['hits']['hits'][n]['_source']['docker_image_short_name'] 
#because thousands of documents are stored per images 
regex = "docker_image_short_name': u'(.+?)'" 
pattern=re.compile(regex) 
query={ 
     "query":{ 
      "bool":{ "must":[{"range":{"@timestamp":{"gt":vulTime}}}] } 
     } 
    } 
page = es.search(index='crawledframe-*', body = query, scroll='1m', size=1000) 
sid = page['_scroll_id'] 
num_page = page['hits']['total'] 

imglist=[] 
while num_page > 0: 
    print num_page 
    print vulTime 
    imgs = re.findall(pattern, str(page)) 
    imglist += imgs 

    page = es.scroll(scroll_id = sid, scroll = '1m') 
    num_page = len(page['hits']['hits']) 

imglist = list(set(imglist))#remove duplicaton 

我想只提取 「docker_image_short_name」

但是,我得到錯誤(打印結果):

num_page: 2327261 
vulTime : 0001-01-01 
Traceback (most recent call last): 
    File "test.py", line 68, in <module> 
    worker_main() 
    File "test.py", line 63, in worker_main 
    imgnames = recent_crawl_index(es, vulTime) 
    File "test.py", line 45, in recent_crawl_index 
    page = es.scroll(scroll_id = sid, scroll = '1m') 
    File "/usr/local/lib/python2.7/dist-packages/elasticsearch/client/utils.py", line 73, in _wrapped 
    return func(*args, params=params, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/elasticsearch/client/__init__.py", line 1024, in scroll 
    params=params, body=body) 
    File "/usr/local/lib/python2.7/dist-packages/elasticsearch/transport.py", line 312, in perform_request 
    status, headers, data = connection.perform_request(method, url, params, body, ignore=ignore, timeout=timeout) 
    File "/usr/local/lib/python2.7/dist-packages/elasticsearch/connection/http_urllib3.py", line 128, in perform_request 
    self._raise_error(response.status, raw_data) 
    File "/usr/local/lib/python2.7/dist-packages/elasticsearch/connection/base.py", line 125, in _raise_error 
    raise HTTP_EXCEPTIONS.get(status_code, TransportError)(status_code, error_message, additional_info) 
elasticsearch.exceptions.RequestError: <exception str() failed> 

我不知道爲什麼會發生這個呃ROR,因爲我用同樣的邏輯在其他代碼

和es.search()並沒有出現錯誤...

沙发
0
0

看來你正在使用Elasticsearch DSL的版本錯誤。

你需要做的是以下幾點:

  • 檢查elasticsearch版本curl -XGET 'localhost:9200'
  • 你應該再搭配你的elasticsearch版本與compatable version of Elasticsearch DSL。例如,如果你的Elasticsearch版本1.x做到以下幾點:

    - pip uninstall elasticsearch-dsl

    - pip install "elasticsearch-dsl<2.0.0"

0
votes
answers
2 views
+10

Rails的 - 如何searchkick過濾字符串字段?

1

在軌,我使用searchkick寶石搜索。我需要爲過濾器添加一個名爲status的字符串字段。我怎樣才能添加到這個插件?Rails的 - 如何searchkick過濾字符串字段?

已經我提出關於這個問題Rails - How to add more fields for filter in searchkick?

現在我用繩子場,而不是試圖布爾搜索仍不能正常工作一個問題。請幫助我一樣。

我添加了一個條件像where: {status: 'approved'},按照這個條件,我應該得到的只有活躍用戶(不是「刪除」的用戶)。目前沒有搜索數據顯示。

searchkick word_start: [:name] 

def initialize(name, limit = User::SUGGESTION_LIMIT, page = nil) 
    @name = name 
    @limit = limit 
    @page = page 
    @per_page = limit.to_i 
end 

query = { 
    match: :word_start, 
    where: {status: 'approved'}, 
    fields: [{ emails: "exact" }, "name^5"], 
    misspellings: { prefix_length: 2 }, 
    load: false 
} 

User.search(name, query).records 

我也已經加入過濾像searchkick word_start: [:name], filterable: [:status]

Server日誌嘗試是,

Processing by UsersController#search as JSON 
Parameters: {"query"=>"sal"} 
ETHON: Libcurl initialized 
ETHON: performed EASY 
effective_url=http://elastic:[email protected]:9200/users-some_index-en/_search response_code=200 return_code=ok total_time=0.498938 
User Search (589.3ms) curl http://14.127.18.141:9200/users-some_index-en/_search?pretty -d '{"query":{"bool":{"must":{"dis_max":{"queries":[{"match":{"emails.true":{"query":"sal","boost":10,"operator":"and","analyzer":"searchkick_autocomplete_search"}}},{"match":{"emails.true":{"query":"sal","boost":1,"operator":"and","analyzer":"searchkick_autocomplete_search","fuzziness":1,"prefix_length":2,"max_expansions":3,"fuzzy_transpositions":true}}},{"bool":{"must":{"bool":{"should":[{"match":{"name.word_start":{"query":"sal","boost":50.0,"operator":"and","analyzer":"searchkick_word_search"}}},{"match":{"name.word_start":{"query":"sal","boost":5.0,"operator":"and","analyzer":"searchkick_word_search","fuzziness":1,"prefix_length":2,"max_expansions":3,"fuzzy_transpositions":true}}}]}},"should":{"match":{"name.analyzed":{"query":"sal","boost":50.0,"operator":"and","analyzer":"searchkick_word_search"}}}}}]}},"filter":[{"term":{"status":"approved"}}]}},"size":5,"from":0,"timeout":"11s"}' 
User Load (0.8ms) SELECT "users".* FROM "users" WHERE "users"."id" = $1 LIMIT $2 [["id", 1], ["LIMIT", 1]] 
ETHON: performed EASY effective_url=http://elastic:[email protected]:9200/entities-some_index-en/_search response_code=200 return_code=ok total_time=0.251783 
+0

你添加的代碼段的after_update是不夠的,我們理解你想要什麼。添加更多代碼。 –

+0

問題已更新。 –

沙发
0
1

更改scope :search_import根據你的病情和修改should_index?方法一樣,

def should_index? 
    User.search_import 
end 

更改後,請致電rei ndex單獨的任何數據

0
votes
answers
2 views
+10

錯誤,而試圖JMeter的和Kibana

0

我試圖使用本手冊的JMeter連接到Kibana之間的整合:下載elasticsearch-5.6.4.zip https://blogs.sap.com/2016/04/06/load-testing-with-jmeter-test-results-visualization-using-kibana-dashboards/comment-page-1/#comment-398399錯誤,而試圖JMeter的和Kibana

  • 我使用JMeter的3.2和。

  • 我解壓zip,並把該文件夾elasticsearch-5.6.4在C:的JMeter Apache的JMeter的-3.2 lib中

  • 我下載了罐子JMeter_ElasticsearchListener.jar並把它放在C: JMeter的 Apache的JMeter的-3.2 lib中分機

  • 我重新啓動JMeter的和按添加 - >監聽器 - >後臺監聽器,並得到這些錯誤:

017-11-11 09:39:12,429 ERROR o.a.j.g.GuiPackage: Problem retrieving gui for org.apache.jmeter.visualizers.backend.BackendListenerGui java.lang.NoClassDefFoundError: org/elasticsearch/client/RestClientBuilder$HttpClientConfigCallback at java.lang.Class.forName0(Native Method) ~[?:1.8.0_141] at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_141] at org.apache.jmeter.visualizers.backend.BackendListenerGui.actionPerformed(BackendListenerGui.java:166) ~[ApacheJMeter_components.jar:3.2 r1790748] at javax.swing.JComboBox.fireActionEvent(Unknown Source) ~[?:1.8.0_141] at javax.swing.JComboBox.setSelectedItem(Unknown Source) ~[?:1.8.0_141] at javax.swing.JComboBox.setSelectedIndex(Unknown Source) ~[?:1.8.0_141] at org.apache.jmeter.visualizers.backend.BackendListenerGui.clearGui(BackendListenerGui.java:281) ~[ApacheJMeter_components.jar:3.2 r1790748] at org.apache.jmeter.gui.GuiPackage.createTestElement(GuiPackage.java:348) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.gui.action.AddToTree.doAction(AddToTree.java:68) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:74) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:59) ~[ApacheJMeter_core.jar:3.2 r1790748] at java.awt.event.InvocationEvent.dispatch(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue.dispatchEventImpl(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue.access$500(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_141] at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_141] at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue.dispatchEvent(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.run(Unknown Source) [?:1.8.0_141] Caused by: java.lang.ClassNotFoundException: org.elasticsearch.client.RestClientBuilder$HttpClientConfigCallback at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_141] at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_141] at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_141] ... 25 more 2017-11-11 09:39:40,782 ERROR o.a.j.g.a.AddToTree: Exception while adding a component to tree. java.lang.RuntimeException: java.lang.NoClassDefFoundError: org/elasticsearch/client/RestClientBuilder$HttpClientConfigCallback at org.apache.jmeter.gui.GuiPackage.createTestElement(GuiPackage.java:359) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.gui.action.AddToTree.doAction(AddToTree.java:68) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.gui.action.ActionRouter.performAction(ActionRouter.java:74) ~[ApacheJMeter_core.jar:3.2 r1790748] at org.apache.jmeter.gui.action.ActionRouter.lambda$actionPerformed$0(ActionRouter.java:59) ~[ApacheJMeter_core.jar:3.2 r1790748] at java.awt.event.InvocationEvent.dispatch(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue.dispatchEventImpl(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue.access$500(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue$3.run(Unknown Source) [?:1.8.0_141] at java.security.AccessController.doPrivileged(Native Method) ~[?:1.8.0_141] at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source) [?:1.8.0_141] at java.awt.EventQueue.dispatchEvent(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.pumpEvents(Unknown Source) [?:1.8.0_141] at java.awt.EventDispatchThread.run(Unknown Source) [?:1.8.0_141] Caused by: java.lang.NoClassDefFoundError: org/elasticsearch/client/RestClientBuilder$HttpClientConfigCallback at java.lang.Class.forName0(Native Method) ~[?:1.8.0_141] at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_141] at org.apache.jmeter.visualizers.backend.BackendListenerGui.actionPerformed(BackendListenerGui.java:166) ~[ApacheJMeter_components.jar:3.2 r1790748] at javax.swing.JComboBox.fireActionEvent(Unknown Source) ~[?:1.8.0_141] at javax.swing.JComboBox.setSelectedItem(Unknown Source) ~[?:1.8.0_141] at javax.swing.JComboBox.setSelectedIndex(Unknown Source) ~[?:1.8.0_141] at org.apache.jmeter.visualizers.backend.BackendListenerGui.clearGui(BackendListenerGui.java:281) ~[ApacheJMeter_components.jar:3.2 r1790748] at org.apache.jmeter.gui.GuiPackage.createTestElement(GuiPackage.java:348) ~[ApacheJMeter_core.jar:3.2 r1790748] ... 17 more Caused by: java.lang.ClassNotFoundException: org.elasticsearch.client.RestClientBuilder$HttpClientConfigCallback at java.net.URLClassLoader.findClass(Unknown Source) ~[?:1.8.0_141] at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_141] at java.lang.ClassLoader.loadClass(Unknown Source) ~[?:1.8.0_141] at java.lang.Class.forName0(Native Method) ~[?:1.8.0_141] at java.lang.Class.forName(Unknown Source) ~[?:1.8.0_141] at org.apache.jmeter.visualizers.backend.BackendListenerGui.actionPerformed(BackendListenerGui.java:166) ~[ApacheJMeter_components.jar:3.2 r1790748] at javax.swing.JComboBox.fireActionEvent(Unknown Source) ~[?:1.8.0_141] at javax.swing.JComboBox.setSelectedItem(Unknown Source) ~[?:1.8.0_141] at javax.swing.JComboBox.setSelectedIndex(Unknown Source) ~[?:1.8.0_141] at org.apache.jmeter.visualizers.backend.BackendListenerGui.clearGui(BackendListenerGui.java:281) ~[ApacheJMeter_components.jar:3.2 r1790748] at org.apache.jmeter.gui.GuiPackage.createTestElement(GuiPackage.java:348) ~[ApacheJMeter_core.jar:3.2 r1790748] ... 17 more

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

沙发
0
1

你缺少一個罐子,這是REST客戶端jar,只需添加以下jar到您的lib文件夾(C: Jmeter apache-jmeter-3.2 lib)

elasticsearch-rest-client-5.6.4.jar 
板凳
0
1

我不認爲JMeter的遞歸搜索任何文件夾中的「LIB」文件夾中尋找它可以添加到其類路徑中的任何.jar文件,所以我會建議無論是從elasticsearch-5.6.4文件夾移動所有.jar文件到JMeter的「 lib「文件夾。

另外,您可以在下一行添加到user.properties文件

user.classpath=C:Jmeterapache-jmeter-3.2libelasticsearch-5.6.4` 

在這兩種情況下,JMeter的重啓將被要求挑選庫了(在你安裝Jmeter的「bin」文件夾的生活) 。

的更多信息: