2017-06-06 63 views
0

enter image description here下面是從Solr的指數的json響應,Lucene搜索返回相同的值兩次

> <doc> <str name="longitudeCoordinate">11.2409</str> <str 
> name="chainName">Pegasus Connect</str> <str 
> name="currencyCode">EUR</str> <str name="entityType">hotelInfo</str> 
> <str name="propertyName">BELLA VISTA</str> <str 
> name="chainCode">UZ</str> <str name="marketerName">Pegasus 
> Solutions</str> <str name="disableReasonId">A</str> <str 
> name="propertyId">100003</str> <str name="marketerId">PEGASUS</str> 
> <str name="propertyStatus">Inactive</str> <str 
> name="latitudeCoordinate">43.77691</str> <str 
> name="countryCode">ES</str> </doc> 

以檢索這個細節我寫了下面的Lucene搜索我框下面的查詢,

+entityType:hotelInfo +(propertyId:100003) +(marketerId:PEGASUS) +(chainCode:UZ) +(+propertyName:bella +propertyName:vista*) +(disableReasonId:P disableReasonId:C disableReasonId:A) 

但它給了兩次相同的結果。

if (hotelName != null) { 
       StandardAnalyzer analyzer; 
       analyzer = new StandardAnalyzer(Version.LUCENE_46); 
       QueryParser queryParser = new QueryParser (Version.LUCENE_46, "propertyName", analyzer); 
       // queryParser.setAllowLeadingWildcard (true); 
       queryParser.setDefaultOperator(QueryParser.Operator.AND); 
       Query pNameQuery = null; 
       try { 
        pNameQuery = queryParser.parse (hotelName + "*"); 

       } catch (ParseException e) { 

        e.printStackTrace(); 
       } finally { 
        analyzer.close(); 
       } 
       hotelInfoQuery.add (pNameQuery, BooleanClause.Occur.MUST); 
      } 

我只加負責過濾,如果我得到它的代碼部分是創建多個結果,並幫助糾正它property-name.It將是非常有用的部分。

問候, 拉加

回答

0

我沒有足夠的信譽發表評論,因此必須回答。

首先,讓我們確保您沒有將相同的文檔兩次添加到索引。 文檔有一個Id。也打印文檔ID。

如果兩個文檔具有不同的ID,則您已插入兩次相同的文檔。

如果Ids相同,我們將不得不深入挖掘。

+0

這應該是正確的答案,您可能已經將兩次相同的文檔插入solr核心。 – jeorfevre

+0

感謝您的回答,實際上我驗證了從搜索查詢返回的scoreDoc []數組,它本身包含2個結果。附上screenshto以供參考。 – Raghavan

+0

如果您注意到分數相同,這意味着您已經添加了相同的文檔兩次。並且都收到了不同的文件ID,這是預期的。 –