2010-06-30 84 views
5

Tôi đang gặp sự cố khi phân tách dấu chấm câu từ chỉ mục solr Khi dấu câu theo sau ngay từ sau thì từ này không được lập chỉ mục đúng cách.Solr: dấu chấm câu trước chỉ mục

Ví dụ: nếu chúng tôi lập chỉ mục "hello, John", nội dung sẽ không được tìm thấy theo từ khóa "hello" trong khi sẽ không có vấn đề gì nếu chúng tôi xóa dấu phẩy sau từ "hello".

Có bộ lọc nào mà nhà máy lọc giả sử dụng để bỏ dấu chấm câu không? Bất kỳ ý tưởng?

Cảm ơn, Bogdan.

Trả lời

6

Điều này được thực hiện bằng WordDelimiterFilterFactory. Đặt generateWordParts = 1.

Ngoài ra còn có PatternTokenizerFactory có thể được sử dụng, nhưng tôi chưa bao giờ thử.

+0

Đối với những người có trường hợp cạnh như tôi: Các generateWordParts = 1 sẽ làm việc bình thường, nhưng nếu bạn đang làm gì tôi đang làm, nó sẽ không: Tôi đang sử dụng 'type' thuộc tính của WDFF để ánh xạ. và $ đến ALPHA, để tôi có thể đối sánh các cụm từ như '$ 10,00'. Điều này có tác dụng phụ tiêu cực gây ra tiền tố và hậu tố giai đoạn được bao gồm như một phần của từ. Vì vậy, trong trường hợp của tôi câu trả lời của @claytron có thể phù hợp hơn. –

6

Bạn có thể sử dụng solr.PatternReplaceFilterFactory dải đầu và dấu chấm câu với điều này:

<filter class="solr.PatternReplaceFilterFactory" 
    pattern="^\p{Punct}*(.*?)\p{Punct}*$" 
    replacement="$1"/> 

Và nếu bạn muốn gỡ bỏ tất cả dấu chấm câu vào lúc bắt đầu và kết thúc, trừ trường hợp (ví dụ) với đồng đô la-đăng nhập trước của một từ, bạn có thể sử dụng này:

<filter class="solr.PatternReplaceFilterFactory" 
    pattern="^[\p{Punct}&&[^$]]*(.*?)\p{Punct}*$" 
    replacement="$1"/> 
+0

Tôi tin rằng bản chỉnh sửa của Mason đã thay đổi câu trả lời quá hoàn toàn. Anh nên thêm một câu trả lời khác. – CorayThan

+0

@CorayThan Làm thế nào là nó quá cấp tiến của một sự thay đổi? Tôi hơi chỉnh regex về câu trả lời ban đầu của claytron kể từ khi bắt dấu chấm câu chỉ để vứt nó đi sau đó là không cần thiết, và sau đó thêm một ví dụ về cách tinh chỉnh thêm regex đó nếu muốn xóa tất cả dấu chấm câu TRỪ một ký tự cụ thể ... có thể khá hữu ích. Không có vẻ như là một câu trả lời hoàn toàn khác với tôi, do đó, có vẻ như không đúng khi đăng nó như vậy. –

0

sử dụng PatternReplaceFilterFactory

<!-- remove punctuation --> 
    <filter class="solr.PatternReplaceFilterFactory" pattern="^(\p{Punct}*)(.*?)(\p{Punct}*)$" replacement="$2"/> 
    <filter class="solr.LowerCaseFilterFactory"/> 
<filter class="solr.StandardFilterFactory"/> 
    <filter class="solr.RemoveDuplicatesTokenFilterFactory"/> 
    </analyzer> 

...

Các vấn đề liên quan