1

私はMarklogicツールに取り組んでおり、約27000のドキュメントのデータベースを持っています。私がやりたいことは、検索クエリの結果によって与えられたドキュメントで最大の頻度を持つキーワードを取得することです。現在、クエリ結果として取得されたすべてのドキュメントのセット内の各単語の頻度をカウントするために xquery 関数を使用しています。ただし、これはかなり非効率的です。marklogicが索引付けを行った単語のリストを取得できると助かると考えていました。では、marklogic のユニバーサル インデックスからインデックス付き単語のリストを取得する方法はありますか??

4

4 に答える 4

1

検索に複数の用語が含まれている場合はどうなりますか? 注文はどのように計算しますか?

ドキュメントのコーパスで非常に一般的な用語と、非常にまれな用語がある場合はどうなるでしょうか。「プロテアーゼ」よりも「the」の数の方がスコアに貢献するべきですか、それとも同じように貢献すべきですか?

単語がタイトルにある場合とドキュメントの他の場所にある場合、それは重要ですか?

あるドキュメントが比較的短く、別のドキュメントが非常に長い場合はどうでしょうか。それをどのように説明しますか?

これらは、関連性を判断しようとするときに出てくる基本的な質問の一部です。ほとんどの検索エンジンは、用語の頻度 (用語がドキュメントに出現する頻度) とドキュメントの頻度 (用語を含むドキュメントの数) の組み合わせを使用します。また、ドキュメント内の用語の場所を使用してスコアを決定したり、ドキュメントの長さを考慮してスコアを決定したりすることもできます。

MarkLogic は、用語の頻度とドキュメントの頻度の組み合わせを使用して、デフォルトで関連性を判断します。これらの要因 (およびその他) は、検索条件の関連性スコアを決定するために使用されます。このスコアは、検索 API の search:search または低レベルの cts:search およびそのサポート演算子によって返される結果のデフォルトの並べ替えです。

cts:search のオプションの詳細を参照して、さまざまなスコアリング オプションの一部について学習できます。ここで「score-logtfidf」などを参照してください。

http://community.marklogic.com/pubs/5.0/apidocs/SearchBuiltins.html#cts:検索

検索開発者ガイドも参照してください。

http://community.marklogic.com/pubs/5.0/books/search-dev-guide.pdf

概念の多くは、XQuery の将来のバージョンの拡張機能として、XQuery ワーキング グループによって検討されています。それらは今日の言語の一部ではありません。MarkLogic は何年にもわたって検索の最前線に立っているため、この製品には多くの機能があり、この分野に関連する多くの議論がアーカイブにあることがわかります。

于 2012-05-25T12:57:57.553 に答える
1

「marklogic のユニバーサル インデックスからインデックス付き単語のリストを取得する方法はありますか?」いいえ。ユニバーサル インデックスはハッシュ インデックスであるため、単語ではなくハッシュが含まれます。

他の人が指摘したように、コンテンツをリストできる値ベースのレキシコンを作成できます。これらの一部には、周波数情報も含まれています。ただし、別の提案cts:distinctive-terms()があります。ノードのシーケンスから最も特徴的な用語を識別します。これは、検索結果の現在のページである可能性があります。出力用語を単なる単語にするか、要素単語や句などのより複雑な用語を含めるかを制御できます。詳細については、ドキュメントを参照してください。

http://docs.marklogic.com/5.0doc/docapp.xqy#display.xqy?fname=http://pubs/5.0doc/apidoc/SearchBuiltins.xml&category=SearchBuiltins&function=cts:特有の用語

于 2012-05-25T16:05:07.323 に答える
1

通常、MarkLogic では次のようなものを使用します。

(
    for $v in cts:element-values(xs:Qname("myelem"))
    let $f := cts:frequency($v)
    order by $f descending
    return $v
)[1 to 10]

この種の機能はsearch:searchライブラリに組み込まれており、非常に便利に機能します。

cts:wordsただし、残念ながら eaの値には使用できません。ただし、あなたを近づけるちょっとしたトリックがあります。を使用する代わりに、 on aをcts:frequency使用してフラグメント数を取得できます。xdmp:estimatects:search

(
    for $v in cts:words()
    let $f := xdmp:estimate(cts:search(collection(), $v))
    order by $f descending
    return $v
)[1 to 10]

パフォーマンスは低下しますが、すべてのドキュメントを単刀直入に実行するよりもはるかに高速です。

チッ!

于 2012-05-25T09:56:35.487 に答える
0

cts:distinctive-terms() を使用しました。私の場合、ほとんど役に立たないワイルドカードの用語を提供します。さらに、単一の文書内で特徴的な用語を見つけるのに適しています。多くのドキュメントで実行しようとすると、非常に遅くなります。

私が実装したいのは、検索結果に表示されるドキュメントのキーワードが取り込まれる動的なファセットです。私はそれを実装しましたが、ドキュメント内のすべての単語の頻度をカウントするため、非効率的です。この特定の用語またはフレーズを検索した場合、これらの提案された用語またはフレーズに興味があるかもしれないような、提案または推奨機能にしたいと考えています. そのため、検索結果のドキュメントのセットに共通する用語を見つける効率的な方法が必要です。

提案どおりに cts:words() を試しました。検索キーワードと類似した単語と、それが含まれるドキュメントの数を示します。考慮されないのは、検索結果ドキュメントのセットです。これらのドキュメントが検索結果に存在するかどうかに関係なく、データベース全体で類似の単語を含むドキュメントの数を表示するだけです

于 2012-05-28T09:34:22.493 に答える