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 | 繁体 | 简体


3 questions online user: 35

0
votes
answers
5 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
3 views
+10

DynamoDB併發寫入

3

我有一個具有屬性的現有DynamoDB表說DynamoDB併發寫入

 
--------------------------------------------------------- 
hk(hash-key)| rk(range-key)| a1 | a2 | a3 | 
--------------------------------------------------------- 


我有一個現有的DynamoDb客戶端,只只A1更新現有記錄。我想創建第二個作家(DDB客戶端),它也將更新現有的記錄,但僅適用於a2和a3。
如果ddb客戶端同時嘗試更新相同的記錄(a1爲1,另一個爲a2和a3),那麼DynamoDb會保證所有a1 a2 a3都更新爲正確的值(全部三個新值)?是否使用保存行爲UPDATE_SKIP_NULL_ATTRIBUTES足夠用於此目的,還是我需要實現某種樂觀鎖定?如果沒有, DDB爲此提供了什麼?

沙发
0
-1

讀到DyanmoDB最終是一致的。 請參閱:http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/HowItWorks.ReadConsistency.html

DynamoDB支持最終一致和強一致的讀取。

最終一致讀取

當你從一個DynamoDB表中讀取數據,響應可能不會 反映最近完成寫操作的結果。 響應可能包含一些陳舊的數據。如果您在短時間後重複閱讀 請求,則回覆應返回最新的 數據。

強一致性讀取

當你請求一個強烈一致的讀取,DynamoDB返回與最先進的最新數據 響應,反映了更新從 的是成功的所有先前的寫操作。如果存在網絡延遲或中斷,則可能無法使用強烈一致的 讀取。

注意DynamoDB使用最終一致的讀取,除非您另行指定 。讀操作(如GetItem,Query和Scan)提供了一個ConsistentRead參數 。如果將此參數設置爲true,則 DynamoDB在操作期間使用強烈一致的讀取。

基本上,你已經指定你閱讀時需要強有力的一致性數據。

而這應該可以解決你的問題。通過一致的讀取,您應該看到所有三個字段的更新。

請注意,對強一致性讀取有定價影響。

+0

我知道吞吐量消耗強烈一致的讀取。我只是問是否可以同時用兩個不同的作家寫同一個記錄,或者其中一個會一次成功,最後的記錄最終可能是a1 a2 a3或a1 a2 A'3。希望我能解釋我的問題。 –

板凳
0
0

如果您碰巧使用Dynamo Java SDK,那麼您很幸運,因爲SDK只支持Optimistic Locking。我不知道其他SDK是否支持類似的東西 - 我懷疑他們不支持。

樂觀鎖是爲了確保客戶端項目 正在更新(或刪除)是相同 DynamoDB項目的戰略。如果你使用這種策略,那麼你的數據庫寫入是 保護免受其他人的寫入覆蓋 - 反之亦然 。

+0

謝謝,讓我們看看樂觀鎖定是唯一的方法。 –

0
votes
answers
3 views
+10

有沒有辦法僅通過Google Cloud Datastore更新單個屬性值?

0

我的項目有Article類。然後,有一種Block種。每個Block都有一個作爲父實體的文章;因此,每篇文章都由幾個Block實體組成。每個Block有一個訂單財產所以最終用戶可以訂購它們。有沒有辦法僅通過Google Cloud Datastore更新單個屬性值?

在前端,用戶可以添加新的Block或更新現有的。顯然,通過向上移動Block,它改變了它自己的順序,但是致命的是,它也改變了(+1)後續的每個實體Block

到目前爲止,對於用戶保存的每一次更新,我檢索所有Block實體的順序等於或大於新保存的實體,並更新它們中的每一個。

是否有辦法使用PHP庫簡單地更新一個屬性(order)?

沙发
0
0

不,你不能只更新一個實體的屬性,你必須更新整個實體。從Updating an entity

要更新現有的實體,修改先前檢索到的實體 的屬性,並存儲它用所述密鑰:

$transaction = $datastore->transaction(); 
$key = $datastore->key('Task', 'sampleTask'); 
$task = $transaction->lookup($key); 
$task['priority'] = 5; 
$transaction->upsert($task); 
$transaction->commit(); 

所提供的數據覆蓋現有的實體。必須將整個對象 發送到雲數據存儲。 [...]

**Note:** To delete a property, remove the property from the entity, then save the entity.