English 中文(简体)
Can I search Solr documents by member of a multi-value field?
原标题:

I have a set of Solr documents containing (among other fields) multi-value fields with percentage data or -1 if the value is null, e.g.

<doc>
    ...
    <arr name="alpha">
        <float>0.23</float>
        <float>0.23</float>
        <float>0.43</float>
    </arr>
    <arr name="beta">
        <float>0.52</float>
        <float>-1.0</float>
        <float>0.34</float>
    </arr>
    <arr name="gamma">
        <float>-1.0</float>
        <float>-1.0</float>
        <float>-1.0</float>
    </arr>
    ...
</doc>

I need to find documents where a multi-value field contains or doesn t contain a certain member for a complete set of test cases. If I can get either of the queries below to work, it would be a tremendous help to locate a particular document out of several hundred thousand:

1) Can I find a document where none of the members of a specific multi-value field meet a certain criterion? (The above doc would be returned if I queried for "alpha has no members matching -1".)

2) Can I find a document where at least one of the members of a specific multi-value field meets a certain criterion? (The above doc would be returned if I queried for "alpha has least one member > 0" or "beta has at least one member > 0".)

I m assuming that a query like alpha:[0 TO 1] doesn t work because the field is an array instead of a scalar. A definitive answer of "This is impossible" is just as useful as an answer of "Here s how you do it" -- thanks in advance.

EDIT: As with so many problems, the answer is "recheck your assumptions" -- specifically, the developer who generated our documents turned off indexing on the percentage fields.

最佳回答
  1. Yes. -alpha:"-1.0" achieves this.

  2. Your own example, alpha:[0 TO 1], is the solution.

To put simply why this works: Each field is not a value or an array, but rather a vector of terms. Querying a field for a certain term is a request for inclusion (or exclusion), not an equality operation.

The array you are referring to is a part of the result set, which is plain stored data that is returned by Solr as part of the search results.

问题回答

It is certainly possible.

I usually use the FQ (filter query) parameter to get what you want: http://wiki.apache.org/solr/CommonQueryParameters#fq

But you can just throw it on the query as well.

Solution for #1:

fq=-alpha:-1.0

Filters out anything that has alpha equal to -1.0

I am not sure about solution #2. Have you tried the code you mentioned?

fq=beta:[0.0 TO 1.0]

I don t have a good sample dataset to test on.





相关问题
solr problem to get the field names

Ive got a problem. In each document I ve got fields: threads.id and posts.id. I want to get the field name value for them so i can get data from the database. Between the lines beneath i have marked ...

Which is the better client for Solr + PHP?

I have two options http://www.php.net/manual/en/book.solr.php http://code.google.com/p/solr-php-client/ I read it somewhere that that 2) use JSON as output types whereas 1) use XML doc. Isn t ...

Geronimo vs Glassfish

For a production environment, is Apache Geronimo better for applications that uses ActiveMQ, Derby, Solr?

Sort by date in Solr/Lucene performance problems

We have set up an Solr index containing 36 million documents (~1K-2K each) and we try to query a maximum of 100 documents matching a single simple keyword. This works pretty fast as we had hoped for. ...

SOLR - delta import not with last_modified

I saw only ways using delta import with last_modified. Is there some other ways to do delta_imports withut using timestamps? For example, if i have unique key(integer), can i tell SOLR to index only ...

SOLR How to return only limited matched content

ok guys, say in my Schema I have 4 fields: <field name="SiteIdentifier" type="string" indexed="true" stored="true" required="true"/> <field name="Title" type="text" indexed="true" stored="...

Solr - character substitution

I have Solr with indexed database. In my database all data is in Latvian. The problem is, I need to be able to search word Riga as if it is word Rīga. Of course, i can define synonym - Rīga = Riga, ...

热门标签