如何使用solr来计算节点的pagerank?

时间:2017-07-28 09:37:04

标签: solr pagerank

我用这种格式将维基百科转储文件索引到solr:

<page>
    <title>Bruce Willis</title>
    <ns>0</ns>
    <id>64673</id>
    <revision>
      <id>789709463</id>
      <parentid>789690745</parentid>
      <timestamp>2017-07-09T02:27:39Z</timestamp>
      <contributor>
        <username>Materialscientist</username>
        <id>7852030</id>
      </contributor>
      <comment>imdb is not a reliable source</comment>
      <model>wikitext</model>
      <format>text/x-wiki</format>
      <text xml:space="preserve" bytes="57375">{{Use mdy dates|date=March 2012}}
{{Infobox person
 | name = Bruce Willis
 | image = Bruce Willis by Gage Skidmore.jpg
 | caption = Willis at the 2010 [[San Diego Comic-Con]].
 | birth_name = Walter Bruce Willis
 | birth_date = {{Birth date and age|1955|3|19}} 
| 
 | birth_place = [[Idar-Oberstein]], West Germany
 | nationality = [[American people|American]]
 | residence = [[Los Angeles]], [[California]], U.S.

核心的模式文件:

<fieldType name="string" class="solr.StrField"/>
    <fieldType name="date" class="solr.TrieDateField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" positionIncrementGap="0"/>
    <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" positionIncrementGap="0"/>

    <field name="id" type="string" indexed="true" stored="true" required="true"/>
    <field name="_version_" type="long" indexed="true" stored="true"/>
    <field name="TITLE" type="text_wiki" indexed="true" stored="true" termVectors="true" termPositions="true" termOffsets="true" />
    <field name="REVISION_TEXT" type="text_wiki" indexed="true" stored="true" multiValued="true" termVectors="true" termPositions="true" termOffsets="true" />
    <field name="REVISION_TIMESTAMP" type="date" indexed="true" stored="true" multiValued="true" />
    <field name="CONTRIBUTOR_ID" type="int" indexed="true" stored="true" multiValued="true" />
    <field name="CONTRIBUTOR_USERNAME" type="string" indexed="true" docValues="true" stored="true" multiValued="true" />

    <dynamicField name="*" type="string" indexed="true" stored="true" multiValued="true"/>
    <uniqueKey>id</uniqueKey>

我没有发布schema.xml的所有内容。我知道我们可以使用solr来获得分数或相似度。基于(freq *(k1 + 1))/(freq + k1 *(1-b + b * fieldLength / avgFieldLength))计算相似度。我认为页面排名是基于传入和传出页面的数量。但是使用这种类型的字段我无法检索传入和传出的页面。

所以我不知道如何使用solr计算pagerank。我明白了吗?如果你知道怎么做,你能给我一些建议吗?感谢

1 个答案:

答案 0 :(得分:-1)

取决于您希望Pagerank的高级程度。如果您只想考虑入站链接的数量,可以通过提取索引时页面链接到的页面列表来计算它。然后迭代存储的页面并选择链接到您正在查看的页面的文档计数,存储一个新字段,其中包含链接到该页面的文档数。按此分数排序(或使用它进行提升等)以影响返回的结果列表。