[ 
https://issues.apache.org/jira/browse/SOLR-8362?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15036620#comment-15036620
 ] 

Hoss Man commented on SOLR-8362:
--------------------------------


A few notable questions to consider:

* what bytes go in the docValues?
** the original, pre-analyzed input?
*** this would be consistent with things like the TrieField - regarldess of the 
precisionStep and synthetic _indexed_ terms, the docValues only contain the 
original numeric values
** or some post-analysis values corrisponding to the tokens generatd by the 
analyzer?
*** this would be more like how UninvertedField currently produces synthetic 
docValue-esque data for indexed text fields.
* what should the behavior be if a user does a search on a TextField that is 
{{indexed="false" docValues="true"}} ?
** is this just flat out not supported?
** if it is supported, is the query analyzer used?
*** should some other new type of analyzer be used?
*** if there are multiple terms involved in the query, what kind of Query 
object gets returned?
**** There's no positional "phrase" query type concept in docValues, so does it 
just become a BooleanQuery with all clauses mandatory?

A few usecases that should drive the discussion/decisions:

* using docValues for faceting on the _words_ in a large text field
** similar to UninvertedField and/or facet.method.enum with an indexed field 
that does not have docValues
** This would require the docValues to contain "post analysis" terms
* a user who wants a {{<field name="title" type="text" indexed="true" 
stored="true" docValues="true" />}} TextField that they want to search on 
individual "words" but use the docValues for sorting on the whole title value
** yes, they could use another field, but explaining _why_ they might need 
another field to use docValues in this way, as opposed to other string or 
numeric fields, is hard to convey w/o a lot of understanding of what's under 
the covers

----

I'm including for posterity a followup conversation toke, elyograg, and I had 
on the #solr IRC channel not long after revolution (re-posted from my personal 
chat logs with their permissions) ...


* *toke* On a somewhat related note, hoss suggested at Lucene/Solr Revolution 
that it should be possible to hack Solr to support docValues for analyzed 
fields. That would make the "facet on everything" scenario a fair bit lighter 
on the heap.
* *elyograg* what an interesting indea.
* *elyograg* does docValues already support the idea of multiple values per doc?
* *toke* Yes.
* *elyograg* so make the docValues the same as indexed, instead of stored.  I 
would not have thought of it, but now that it's been brought to mind, I'm 
liking it.  and it would solve the problem I had on SOLR-8088.
* *hoss* i missed the start of this conversation, but to followup toke: there's 
no reason the tokens resulting from analysis couldn't be used as docValues - we 
just need to figure out what the configuration should look like so it's clear 
what you get when.
* *toke* We have a few facet fields (author, title and so) where we need to 
normalize, and we really like to be anle to use Solr's analyzers for that.
* *hoss* ie: if i have an another field that is both indexed (with tokenization 
for searching) but also have docValues i want the docValues for sorting -- so 
that should be pre-tokenization ... but other usecases might want the 
post-analyzer values in docValues
* *hoss* another = "author"
* *hoss* toke: yeah ... understood ... i totally get the usecase, we just need 
a TextField patch with well thought out semantics/configuration
* *toke* hoss: For me the simple choice would be that however many tokes you 
end up with gets docValues as the same number of entries. If you want a 
non-tokenized version for sorting, that will have to go into another field.
* *toke* hoss: Not really different from how we do it now.
* *hoss* expect that would make it very confusion/inconsistent with how 
StrField works today
* *hoss* depending on how you think about it
* *toke* It seems I am missing some understanding here.
* *hoss* it's a perception issue ... you percieve docValues today as being an 
alternative storage of the "indexed" terms ... currently only supported for 
fields that don't allow Analyzers so the indexed terms are the same as the 
original raw values
* *hoss* but that's not really true ... for things like TrieFields the 
docValues look nothing like the "indexed terms" (which are specially encoded 
and have multiple terms per value)
* *hoss* it's more accurate to say that for fieldtypes that currently support 
docValues, the data put in the docValues is always the same as the data put in 
the stored field
* *hoss* so if we start supporting docValues on TextField, the question of 
"what bytes are in the docValues for a field that has an analyzer" because a 
confusing question
* *toke* With that in mind, docValues for StrField is already quite different 
from the numerics.
* *hoss* using hte post-analyzer bytes is *less* consistent then what currently 
happens with other fields
* *toke* So docValues should mimick String as close as possible.
* *hoss* ok ... but "mimic string as close as possible" still doesn't answe the 
question of how it should behave .. since with a String the docValues are 
identicle to *both* the indexed terms *AND* the stored fields
* *hoss* that's my point
* *hoss* there's a big grey area as to what the behavior *should* be ... to you 
it's obviously one thing; to me it feels very much like it should be the 
oposite of what you think, and that makes it obvious to me that it's not 
obvious :\)
* *toke* I think I grasp some of your point underneath the hood. Another 
perspective is that docValues = analyzed & indexed for String fields (where tha 
analyzer is null/passthrough).
* *hoss* understood ... and i want something to support your usecase with that 
perspective ... but i also want to ensure that the solution either supports -- 
or at a minimum doesn't confuse the fuck out of -- people whose perceptions go 
the other way
* *toke* So the problem is the tokenization, right? This boils down to whether 
"A b C" should end up at "a", "b" and "c" in docValues or "a b c"?
* *hoss* well ... the whole analyzer, yeah.
* *toke* Okay, understanding increased. And I also understand that having a 
collapseTokens-parameter would be hard to explain.
* *elyograg* I envision a slightly different config, such as 
docValues="indexed" or perhaps docValuesIndexed="true".  I don't like the 
former syntax very much, except that it makes it impossible to mix with 
docValues="true".
* *hoss* yeah ... exactly ... both your comments are why i'm saying it needs a 
lot of thought for the semantics/config ... it's why the whole thing was kind 
of punted on very early
* *elyograg* code to error on the combination of a new parameter with the 
current parameter is easy enough, though.
* *hoss* the best idea i've come up with is to make it a new type of analyzer: 
type="docValues" ... and by default use an anon analyzer with the 
KeywordTokenizer
* *toke* My naïve entry was that docValued Text would act identical to 
non-docValued, just bringing heap-release goodnes.
* *toke* hoss: That would guard against unexpected behaviour, but would not be 
very consistent with current attribute-based enabling of docValues. I don't 
have any better suggestion though.
* *hoss* you would still need the docValues="true" attribute to enable ... 
rememebr the field vs fieldtype defaults
* *hoss* it would be just like today: you can have an indexed="false" TextField 
with an <analyzer type="index"> ... and then a field that uses that fieldtype 
can override indexed="true"
* *hoss* replace indexed with docValues and it would work the same way
* *toke* hoss: I think I got that. So with this, it would be possible to have 
different values indexed, stored & docValued for a Text field?
* *hoss* toke: exactly ... with 2 diff analyzers



> Add docValues support for TextField
> -----------------------------------
>
>                 Key: SOLR-8362
>                 URL: https://issues.apache.org/jira/browse/SOLR-8362
>             Project: Solr
>          Issue Type: Improvement
>            Reporter: Hoss Man
>
> At the last lucene/solr revolution, Toke asked a question about why TextField 
> doesn't support docValues.  The short answer is because no one ever added it, 
> but the longer answer was because we would have to think through carefully 
> the _intent_ of supporting docValues for  a "tokenized" field like TextField, 
> and how to support various conflicting usecases where they could be handy.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to