Hi all,

first of all: sorry if this is a RTM question, I scanned the documents and 
didn't find any hint... I'm currently having trouble trying to get search 
results ordered in the way I want them to be. I've looked at the documentation 
in the search-dev-guide, explaining the different calculation methods like 
logtfidf, logtf, ..., but didn't find the solution yet.

I created a very small test containing two documents, and one search command 
operating on one of the elements (see below). While the first document contains 
"some more additional text" the second one contains just the one word I'm 
searching for in the used element. I expected the document with the "perfect 
match" to come first (the doc as well as the element used for the search is 
"shorter", so I assumed the term frequency would be different because it is 
defined as "normalized to take into account the size of the document, so that a 
word that occurs 10 times in a 100 word document will get a higher score than a 
word that occurs 100 times in a 1,000 word document"). But the result shows 
that both docs are ranked in the same way (score, confidence, and fitness), so 
that the sorting is not as desired. The chosen calculation method (logtfidf or 
logtf) influences the absolute values, but not the result that both docs are 
treated as "equally meaningful". What I found out during testing is that if the 
text in the element is "very large" (tested with 200+ words), then the desired 
effect finally occurs, the doc has a lower score. But in our case this does not 
really help, as the text is a heading, normally containing only one or very few 
words...

Could you please explain what I'm doing wrong, and/or how I'm able to achieve 
the desired result? Perhaps it would be an idea to use score-simple and then 
divide the returned score by the length of the element - but this would make 
pagination obsolete, as I would have to get all return values first in order to 
calculate "my own score", which could have negative impact on the runtime (and 
please correct me if this is wrong as well).

Thanks in advance,
               Arne Kampf
---------
import module
        namespace search="http://marklogic.com/appservices/search";
        at "/MarkLogic/appservices/search/search.xqy";

(: this should come second :)
let $data1 :=
    <data>
        <myowntest>very very long text which is containing MyTestWord only 
once, so not as relevant as if it is the only word (tested up to 100 
words)</myowntest>
        <b>this has nothing to do with the element myowntest, so it should be 
ignored</b>
        <b>this has nothing to do with the element myowntest, so it should be 
ignored</b>
    </data>

(: this should come first :)
let $data2 :=
    <data>
        <myowntest>MyTestWord</myowntest>
        <b>this has nothing to do with the element myowntest, so it should be 
ignored</b>
    </data>

let $dummy := 
(xdmp:document-insert("/test/doc1",$data1),xdmp:document-insert("/test/doc2",$data2))

let $options-for-search :=
    <options xmlns="http://marklogic.com/appservices/search";>
         <constraint name="testconstraint">
            <word>
                <element ns="" name="myowntest"/>
            </word>
        </constraint>

        <search-option>score-logtfidf</search-option>
        <debug>true</debug>
    </options>

return search:search("testconstraint:mytestword", $options-for-search)

This e-mail is confidential and may contain information that is legally 
privileged. If you are not the intended recipient of the e-mail or have 
received it in error, do not disclose its contents to anyone. Please also 
contact the sende

_______________________________________________
General mailing list
[email protected]
http://developer.marklogic.com/mailman/listinfo/general

Reply via email to