0

django アプリに haystack/solr の簡単な構成があります。

このアプリの models.py から:

class device(models.Model):
    ...
    hostname = models.CharField(max_length=45, help_text="The hostname for this device")
    ...

このアプリの search_sites.py から:

class devIndex(indexes.SearchIndex):
    '''Haystack class to allow for indexing device objects in TOMS'''
    text = indexes.CharField(document=True, use_template=True)

このアプリの templates/search/indexes/systems_management/device_text.txt から (名前はすべて jibe)

...
{{ object.hostname }}
...

問題:

システムの名前は static1.foo.com です。

「静的」を検索すると、すべての静的サーバーの結果が得られます (「静的」は説明フィールドにあります)。

「static1」を検索すると、0 件の結果が得られます

「static1.foo.com」を検索すると、このサーバーを含む結果が得られます。

私の質問は、haystack/solr が「static1」クエリと一致しないのはなぜですか?

4

2 に答える 2

0

Solrには多くの構成が可能です。ユースケースでは、schema.xmlでエッジngramを使用することをお勧めします。次に例を示します。

<fieldType name="edge_ngram" class="solr.TextField" positionIncrementGap="1">
  <analyzer type="index">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="1" splitOnCaseChange="1"/>
    <filter class="solr.EdgeNGramFilterFactory" minGramSize="4" maxGramSize="15" side="front" />
  </analyzer>
  <analyzer type="query">
    <tokenizer class="solr.WhitespaceTokenizerFactory" />
    <filter class="solr.LowerCaseFilterFactory" />
    <filter class="solr.WordDelimiterFilterFactory" generateWordParts="1" generateNumberParts="1" catenateWords="0" catenateNumbers="0" catenateAll="1" splitOnCaseChange="1"/>
  </analyzer>

この例を使用して、目的の結果が返されるまで少し調整します。

于 2011-12-22T09:22:43.990 に答える
0

おそらく分析の問題です。このフィールドの schema.xml ファイルで StandardTokenizer を使用していると思います。

標準のトークナイザーは、ホスト名を単一のトークンとしてトークン化します。(参照: http://www.lucidimagination.com/search/document/CDRG_ch05_5.5.1 )、完全なホスト名とのみ一致させることができます。

部分的に検索する場合は、別のトークナイザーを使用する必要があります。Solr の例のデフォルトのテキスト フィールドは、ホスト名を分割する WhitespaceTokenizer および WordDelimeter フィルターを使用します。これにより、「static1」のクエリで見つけることができます。

于 2010-02-05T21:43:36.577 に答える