On Mon, Feb 17, 2014 at 2:00 PM, Ahmet Arslan <iori...@yahoo.com> wrote: > Hi, >
> Also I noticed that in your code snippet you have server.delete("foo"); which > does not exists. deleteById and deleteByQuery methods are defined in > SolrServer implementation. Yes, sorry, I have a wrapper over the SolrInstance that doesn't do much. In the case of delete it just forwards the call to deleteById. I'll check the expungeDeletes=true flag and post back the results. Thanks, Marius > > > > On Monday, February 17, 2014 1:42 PM, Ahmet Arslan <iori...@yahoo.com> wrote: > Hi Marius, > > Facets are computed from indexed terms. Can you commit with > expungeDeletes=true flag? > > Ahmet > > > > > On Monday, February 17, 2014 12:17 PM, Marius Dumitru Florea > <mariusdumitru.flo...@xwiki.com> wrote: > Hi guys, > > I'm using Solr 4.6.1 (embedded) and for some reason the facet cache is > not invalidated when documents are deleted from the index. Sadly, for > me, I cannot reproduce this issue with an integration test like this: > > ----------8<---------- > SolrInstance server = getSolrInstance(); > > SolrInputDocument document = new SolrInputDocument(); > document.setField("id", "foo"); > document.setField("locale", "en"); > server.add(document); > > server.commit(); > > document = new SolrInputDocument(); > document.setField("id", "bar"); > document.setField("locale", "en"); > server.add(document); > > server.commit(); > > SolrQuery query = new SolrQuery("*:*"); > query.set("facet", "on"); > query.set("facet.field", "locale"); > QueryResponse response = server.query(query); > > Assert.assertEquals(2, response.getResults().size()); > FacetField localeFacet = response.getFacetField("locale"); > Assert.assertEquals(1, localeFacet.getValues().size()); > Count en = localeFacet.getValues().get(0); > Assert.assertEquals("en", en.getName()); > Assert.assertEquals(2, en.getCount()); > > server.delete("foo"); > server.commit(); > > response = server.query(query); > > Assert.assertEquals(1, response.getResults().size()); > localeFacet = response.getFacetField("locale"); > Assert.assertEquals(1, localeFacet.getValues().size()); > en = localeFacet.getValues().get(0); > Assert.assertEquals("en", en.getName()); > Assert.assertEquals(1, en.getCount()); > ---------->8---------- > > Nevertheless, when I do the 'same' on my real environment, the count > for the locale facet remains 2 after one of the documents is deleted. > The search result count is fine, so that's why I think it's a facet > cache issue. Note that the facet count remains 2 even after I restart > the server, so the cache is persisted on the file system. > > Strangely, the facet count is updated correctly if I modify the > document instead of deleting it (i.e. removing a keyword from the > content so that it isn't matched by the search query any more). So it > looks like only delete triggers the issue. > > Now, an interesting fact is that if, on my real environment, I delete > one of the documents and then add a new one, the facet count becomes > 3. So the last commit to the index, which inserts a new document, > doesn't trigger a re-computation of the facet cache. The previous > facet cache is simply incremented, so the error is perpetuated. At > this point I don't even know how to fix the facet cache without > deleting the Solr data folder so that the full index is rebuild. > > I'm still trying to figure out what is the difference between the > integration test and my real environment (as I used the same schema > and configuration). Do you know what might be wrong? > > Thanks, > Marius >