2013-12-02 4 views
0

Я использую nutch 1.7 и solr 4.6 для создания поисковой системы для двух веб-сайтов. В seed.txt файл, у меня есть:nutch и solr для нескольких доменов

http://domain1.com/ 
http://domain2.com/ 

я запускаю этот

bin/nutch crawl urls -dir crawl -solr http://localhost:8983/solr/ -depth 1 

Вот мой Solr schema.xml

<?xml version="1.0" encoding="UTF-8" ?> 
<!-- 
Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license agreements. See the NOTICE file distributed with 
this work for additional information regarding copyright ownership. 
The ASF licenses this file to You under the Apache License, Version 2.0 
(the "License"); you may not use this file except in compliance with 
the License. You may obtain a copy of the License at 

    http://www.apache.org/licenses/LICENSE-2.0 

Unless required by applicable law or agreed to in writing, software 
distributed under the License is distributed on an "AS IS" BASIS, 
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 
See the License for the specific language governing permissions and 
limitations under the License. 
--> 
<!-- 
    Description: This document contains Solr 4.x schema definition to 
    be used with Solr integration currently build into Nutch. 
    This schema is not minimal, there are some useful field type definitions left, 
    and the set of fields and their flags (indexed/stored/term vectors) can be 
    further optimized depending on needs. See 
    http://svn.apache.org/viewvc/lucene/dev/trunk/solr/example/solr/conf/schema.xml?view=markup 
    for more info. 
--> 

<schema name="nutch" version="1.5"> 

    <types> 

    <!-- The StrField type is not analyzed, but indexed/stored verbatim. --> 
    <fieldType name="string" class="solr.StrField" sortMissingLast="true" omitNorms="true"/> 
    <fieldType name="int" class="solr.TrieIntField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> 
    <fieldType name="float" class="solr.TrieFloatField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> 
    <fieldType name="long" class="solr.TrieLongField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> 
    <fieldType name="double" class="solr.TrieDoubleField" precisionStep="0" omitNorms="true" positionIncrementGap="0"/> 

    <fieldType name="tint" class="solr.TrieIntField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> 
    <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> 
    <fieldType name="tlong" class="solr.TrieLongField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> 
    <fieldType name="tdouble" class="solr.TrieDoubleField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/> 

    <fieldType name="date" class="solr.TrieDateField" omitNorms="true" precisionStep="0" positionIncrementGap="0"/> 

    <fieldType name="tdate" class="solr.TrieDateField" omitNorms="true" precisionStep="6" positionIncrementGap="0"/> 

    <fieldType name="text_general" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <!-- in this example, we will only use synonyms at query time 
     <filter class="solr.SynonymFilterFactory" synonyms="index_synonyms.txt" ignoreCase="true" expand="false"/> 
     --> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <fieldType name="text_en" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="stopwords.txt" 
       enablePositionIncrements="true" 
       /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 

     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="stopwords.txt" 
       enablePositionIncrements="true" 
       /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
    <filter class="solr.EnglishPossessiveFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
    </fieldType> 
    <fieldType name="text_en_splitting" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
     <analyzer type="index"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="stopwords.txt" 
       enablePositionIncrements="true" 
       /> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="1" catenateNumbers="1" catenateAll="0" splitOnCaseChange="1"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" 
       ignoreCase="true" 
       words="stopwords.txt" 
       enablePositionIncrements="true" 
       /> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="0" splitOnCaseChange="1"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.PorterStemFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <!-- Less flexible matching, but less false matches. Probably not ideal for product names, 
     but may be good for SKUs. Can insert dashes in the wrong place and still match. --> 
    <fieldType name="text_en_splitting_tight" class="solr.TextField" positionIncrementGap="100" autoGeneratePhraseQueries="true"> 
     <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="false"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt"/> 
     <filter class="solr.WordDelimiterFilterFactory" generateWordParts="0" generateNumberParts="0" catenateWords="1" catenateNumbers="1" catenateAll="0"/> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.KeywordMarkerFilterFactory" protected="protwords.txt"/> 
     <filter class="solr.EnglishMinimalStemFilterFactory"/> 
     <!-- this filter can remove any duplicate tokens that appear at the same position - sometimes 
      possible with WordDelimiterFilter in conjuncton with stemming. --> 
     <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <!-- Just like text_general except it reverses the characters of 
    each token, to enable more efficient leading wildcard queries. --> 
    <fieldType name="text_general_rev" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer type="index"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     <filter class="solr.ReversedWildcardFilterFactory" withOriginal="true" 
      maxPosAsterisk="3" maxPosQuestion="2" maxFractionAsterisk="0.33"/> 
     </analyzer> 
     <analyzer type="query"> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.SynonymFilterFactory" synonyms="synonyms.txt" ignoreCase="true" expand="true"/> 
     <filter class="solr.StopFilterFactory" ignoreCase="true" words="stopwords.txt" enablePositionIncrements="true" /> 
     <filter class="solr.LowerCaseFilterFactory"/> 
     </analyzer> 
    </fieldType> 

    <fieldtype name="phonetic" stored="false" indexed="true" class="solr.TextField" > 
     <analyzer> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
     <filter class="solr.DoubleMetaphoneFilterFactory" inject="false"/> 
     </analyzer> 
    </fieldtype> 

    <fieldtype name="payloads" stored="false" indexed="true" class="solr.TextField" > 
     <analyzer> 
     <tokenizer class="solr.WhitespaceTokenizerFactory"/> 
     <filter class="solr.DelimitedPayloadTokenFilterFactory" encoder="float"/> 
     </analyzer> 
    </fieldtype> 

    <!-- lowercases the entire field value, keeping it as a single token. --> 
    <fieldType name="lowercase" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer> 
     <tokenizer class="solr.KeywordTokenizerFactory"/> 
     <filter class="solr.LowerCaseFilterFactory" /> 
     </analyzer> 
    </fieldType> 

    <fieldType name="url" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer> 
     <tokenizer class="solr.StandardTokenizerFactory"/> 
      <filter class="solr.LowerCaseFilterFactory"/> 
      <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1"/> 
     </analyzer> 
    </fieldType> 


    <fieldType name="text_path" class="solr.TextField" positionIncrementGap="100"> 
     <analyzer> 
     <tokenizer class="solr.PathHierarchyTokenizerFactory"/> 
     </analyzer> 
    </fieldType> 

    <!-- since fields of this type are by default not stored or indexed, 
     any data added to them will be ignored outright. --> 
    <fieldtype name="ignored" stored="false" indexed="false" multiValued="true" class="solr.StrField" /> 

</types> 

<fields> 
    <field name="id" type="string" stored="true" indexed="true"/> 

    <!-- core fields --> 
    <field name="segment" type="string" stored="true" indexed="false"/> 
    <field name="digest" type="string" stored="true" indexed="false"/> 
    <field name="boost" type="float" stored="true" indexed="false"/> 
    <field name="_version_" type="long" indexed="true" stored="true"/> 

    <!-- fields for index-basic plugin --> 
    <field name="host" type="url" stored="false" indexed="true"/> 
    <field name="site" type="string" stored="true" indexed="true"/> 
    <field name="url" type="url" stored="true" indexed="true" required="true"/> 
    <!-- stored=true for highlighting, use term vectors and positions for fast highlighting --> 
    <field name="content" type="text_general" stored="true" indexed="true"/> 
    <field name="title" type="text_general" stored="true" indexed="true"/> 
    <field name="cache" type="string" stored="true" indexed="false"/> 
    <field name="tstamp" type="date" stored="true" indexed="false"/> 

    <!-- catch-all field --> 
    <field name="text" type="text_general" stored="false" indexed="true" multiValued="true"/> 

    <!-- fields for index-anchor plugin --> 
    <field name="anchor" type="text_general" stored="true" indexed="true" 
     multiValued="true"/> 

    <!-- fields for index-more plugin --> 
    <field name="type" type="string" stored="true" indexed="true" multiValued="true"/> 
    <field name="contentLength" type="string" stored="true" indexed="false"/> 
    <field name="lastModified" type="date" stored="true" indexed="false"/> 
    <field name="date" type="tdate" stored="true" indexed="true"/> 

    <!-- fields for languageidentifier plugin --> 
    <field name="lang" type="string" stored="true" indexed="true"/> 

    <!-- fields for subcollection plugin --> 
    <field name="subcollection" type="string" stored="true" indexed="true" multiValued="true"/> 

    <!-- fields for feed plugin (tag is also used by microformats-reltag)--> 
    <field name="author" type="string" stored="true" indexed="true"/> 
    <field name="tag" type="string" stored="true" indexed="true" multiValued="true"/> 
    <field name="feed" type="string" stored="true" indexed="true"/> 
    <field name="publishedDate" type="date" stored="true" indexed="true"/> 
    <field name="updatedDate" type="date" stored="true" indexed="true"/> 

    <!-- fields for creativecommons plugin --> 
    <field name="cc" type="string" stored="true" indexed="true" multiValued="true"/> 
</fields> 
<uniqueKey>id</uniqueKey> 
<defaultSearchField>text</defaultSearchField> 
<solrQueryParser defaultOperator="OR"/> 

    <!-- copyField commands copy one field to another at the time a document 
     is added to the index. It's used either to index the same field differently, 
     or to add multiple fields to the same field for easier/faster searching. --> 

<copyField source="content" dest="text"/> 
<copyField source="url" dest="text"/> 
<copyField source="title" dest="text"/> 
<copyField source="anchor" dest="text"/> 
<copyField source="author" dest="text"/> 

</schema> 

, когда я делаю поиск вроде:

http://127.0.0.1:8983/solr/collection1/select?q=keyword&wt=json&indent=true&fq=site:domain1.com 

Ответ

{ 
    "responseHeader":{ 
    "status":0, 
    "QTime":0, 
    "params":{ 
     "indent":"true", 
     "q":"keyword", 
     "wt":"json", 
     "fq":"site:domain1.com"}}, 
    "response":{"numFound":0,"start":0,"docs":[] 
    }} 

Кто-нибудь знает, как отфильтровать результат по домену/сайту?

ответ

0

Есть несколько вещей, которые вы должны сделать, чтобы сделать эту работу

  1. Убедитесь в том, что домен в вашем фильтре так же, как домен, который хранится на сайте поля. Это потому, что вы использовали для этого поля строку типа, которая не выполняет нечеткое сопоставление.
  2. Формат ваших персонажей в их Эквивалент HTML
  3. Ваша строка домена должен быть в кавычках «»

Пример запроса:

http://localhost:8983/solr/collection1/select?q=keyword&fq=site%3A%22http%3A%2F%2Fdomain1.com%22&wt=json&indent=true 

Если поле сайта в моем индексе http://domain1.com

Смежные вопросы